【发布时间】:2021-06-08 05:52:26
【问题描述】:
假设我正在编写一个类模板,其中一些成员受限于类型模板参数静态 constexpr 数据成员的存在 和值:
template<class T>
struct A {
constexpr bool operator()() requires T::value { return T::value; }
constexpr bool operator()() { return false; }
};
#include <type_traits>
static_assert(A<std::true_type>()());
static_assert(!A<std::false_type>()());
static_assert(!A<void>()());
MSVC 和 gcc 接受这个,但 clang 拒绝,除非我 replace requires T::value 和 requires requires { requires T::value; }。这是clang中的错误,还是其他编译器松懈?是C++需要需要需要需要的情况吗?标准是怎么说的?
相关(嗯,至少 ⅔):Why do we require requires requires?
【问题讨论】:
标签: c++ compiler-errors language-lawyer c++20 c++-concepts