template<size_t n>
struct N {
static constexpr size_t v = n;
};
template<size_t n>
constexpr bool operator<(N<n>, size_t n2) {
return n < n2;
}
template<typename N>
constexpr void foo(N v) {
static_assert(v < 5);
}
int main()
{
foo(N<3>{});
return 0;
}
然而,如果我使用 MSVC 编译器,我会遇到错误,提示 v < 5
不是一个常量表达式。我可以理解为什么 MSVC 这样认为,但我认为这是错误的,clang / gcc 是正确的。这是 MSVC 的一个 bug 吗?
this
从未被显式或隐式地评估。 - Cássio Renanthis
,而是因为读取了超出其生命周期的变量。这里应该使用v
而不是this
。 - RbMmconst N v
会怎样? - Robert Andrzejuk