Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 15 additions & 3 deletions include/meta/meta_fwd.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,9 @@
#else
#define META_CONCEPT concept
#define META_CONCEPT_BARRIER(...) __VA_ARGS__
#if __cpp_concepts >= 201811L
#define META_HAS_P1084
#endif
#endif
#define META_TYPE_CONSTRAINT(...) __VA_ARGS__
#else
Expand Down Expand Up @@ -266,20 +269,29 @@ namespace meta
&& std::is_integral_v<typename T::value_type>
&& requires
{
// { T::value } -> Same<const typename T::value_type&>;
#ifdef META_HAS_P1084
{ T::value } -> Same<const typename T::value_type&>;
#else
T::value;
requires Same<decltype(T::value), const typename T::value_type>;
#endif
typename detail::require_constant<T::value>;

// { T::type::value } -> Same<const typename T::value_type&>;
#ifdef META_HAS_P1084
{ T::type::value } -> Same<const typename T::value_type&>;
#else
T::type::value;
requires Same<decltype(T::type::value), const typename T::value_type>;
#endif
typename detail::require_constant<T::type::value>;
requires T::value == T::type::value;

// { T{}() } -> Same<typename T::value_type>;
#ifdef META_HAS_P1084
{ T{}() } -> Same<typename T::value_type>;
#else
T{}();
requires Same<decltype(T{}()), typename T::value_type>;
#endif
typename detail::require_constant<T{}()>;
requires T{}() == T::value;

Expand Down