constexpr Функции могут давать результаты contexpr , даже если их аргументы не являются contexpr, если они не используются. Таково, например, std :: Integral_constant :: operator t :
#include
std::integral_constant a;
constexpr int b = a; // Compiles!
Как я могу сделать концепцию для проверки этого свойства функции?
Например, я хочу, чтобы следующее работало: запустить на gcc.godbolt.org
#include
struct A {explicit constexpr operator bool() const {return true;}};
struct B {int x = 1; explicit constexpr operator bool() const {return x;}};
template
concept C = requires(T t){std::bool_constant{};};
static_assert(C);
static_assert(!C);
< /code>
Но это дает мне: < /p>
:7:46: error: constraint variable 't' cannot be used in an evaluated context
7 | concept C = requires(T t){std::bool_constant};
| ^
Подробнее здесь: https://stackoverflow.com/questions/794 ... ent-is-not