考虑这个非模板类
struct Foo {
constexpr static bool TRUE() {
return true;
}
};
从外部致电Foo::TRUE()
可以正常工作:
int main() {
static_assert(Foo::TRUE(), "");
}
但不是从Foo
本身调用时:
struct Foo {
constexpr static bool TRUE() {
return true;
}
static_assert(Foo::TRUE(), ""); //ERROR
};
错误(有效)的E0028表达式必须具有恒定值
错误C2131表达式的求值结果不是常量
甚至更奇怪的是,可以通过为该类提供模板来“修复”此问题:
template<int x>
struct Foo {
constexpr static bool TRUE() {
return true;
}
static_assert(Foo::TRUE(), ""); //compiles fine
};
int main() {
}
尽管Foo::TRUE()
与int x
无关。
这是怎么回事?
我正在使用Visual Studio 17社区版本15.9.0-感谢您的帮助