constexpr
:
:
std::integral_constant::operator T
我如何制作一个函数来测试函数的属性?,例如,我希望以下工作:
run在gcc.godbolt.org
上
#include <utility>
std::integral_constant<int, 42> a;
constexpr int b = a; // Compiles!
但这给了我:
concept
经过一些实验,我最终得到了:
#include <utility>
struct A {explicit constexpr operator bool() const {return true;}};
struct B {int x = 1; explicit constexpr operator bool() const {return x;}};
template <typename T>
concept C = requires(T t){std::bool_constant<t>{};};
static_assert(C<A>);
static_assert(!C<B>);
这必须是非参考。如果非constexpr参数是参考(至少在编写时),则函数调用结果不能为constexpr。在我的情况下,完整的代码是:
<source>:7:46: error: constraint variable 't' cannot be used in an evaluated context
7 | concept C = requires(T t){std::bool_constant<t>};
| ^