我试图在SO中找到一个类似的回答问题,但没有成功.问题是为什么在编译时使用已知编译时类型的模板参数的编译时知道它被认为是错误的原因?常识告诉我,这段代码可以没问题.这种情况有什么问题?谢谢!
#include <array>
using Cont = std::array<int, 2>;
class A
{
Cont a_ = {};
public:
int& at(bool first)
{
static_assert(sizeof(a_) / sizeof(int) == 2); // OK
static_assert(a_.size() > 1); // error: non-constant condition for static assertion. error: use of 'this' in a constant expression
return a_[first ? 0 : 1];
}
};
Run Code Online (Sandbox Code Playgroud)
更新:它看起来像dublicate但可能不是因为在链接下的问题语音是关于运行时评估,但这里看起来像a_.size()可以在编译时评估.
UPDATE2更明确的例子(在考虑答案和评论后)
#include <array>
using Cont = std::array<int, 2>;
// OK
void checkSize(const Cont& b)
{
static_assert(b.size() == 2);
}
class A …Run Code Online (Sandbox Code Playgroud) c++ ×1