D
struct S {
static const int foo{};
};
constexpr auto k = S::foo;
как же ты их интересно собрался различать )
Size: a a a
D
struct S {
static const int foo{};
};
constexpr auto k = S::foo;
DP
D
concept ... = (T::foo || !T::foo)
template <typename T, T value>
constexpr bool is_constexpr_expr = true;
...
concept ... = is_constexpr_expr<bool, T::foo>;
template <auto>Использование:
concept constant_expression = true;
concept ... = constant_expression<T::foo>
D
D
template <auto>Использование:
concept constant_expression = true;
concept ... = constant_expression<T::foo>
requires
написать ill-formed выражение, то оно вернёт false
простоD
D
D
АК
static_assert(compile_time_foo<FooWithNonConstant>);
не фейлитсяD
static_assert(compile_time_foo<FooWithNonConstant>);
не фейлитсяD
D
FooWithNonConstant::bar
не константное выражение жеD
АК
template <auto Value>
concept constant_expression = (std::integral_constant<decltype(Value), Value>{}, true);
АК
D
АК
АК
АК
template <auto Value>
concept constant_expression = (std::integral_constant<decltype(Value), Value>{}, true);
D