【发布时间】:2019-05-07 03:08:47
【问题描述】:
类似乎在另一个 constexpr 上下文中调用其 constexpr 成员函数时遇到问题。例如在我提出的这段代码in an earlier question 中可以看到这种行为:
struct Foo {
constexpr static bool TRUE() {
return true;
}
static_assert(Foo::TRUE(), ""); //ERROR
};
由于static_assert 依赖于Foo::TRUE() 编译失败,因为Foo::TRUE() 在此上下文中尚未完全解析。
那么向Foo 添加单个模板如何解决整个问题呢?:
template<int x>
struct Foo {
constexpr static bool TRUE() {
return true;
}
static_assert(Foo::TRUE(), ""); //compiles fine
};
在所有这些见解之后,这里的代码不应该编译 - 但它可以编译。这似乎没有意义,因为与非模板版本没有任何区别。
另外,TRUE()-functions 和 static_assert-calls 应该总是和 Foo<> 类一样多,所以编译时应该会出现同样的依赖问题。
我正在使用 Visual Studio 17 社区版本 15.9.0 - 感谢您的帮助!
【问题讨论】:
标签: c++ visual-studio templates c++17 constexpr