【发布时间】:2017-08-11 08:11:12
【问题描述】:
为什么 Microsoft Visual C++ 在编译以下代码时会失败? :
template <typename T>
struct slice
{
size_t length;
T *ptr;
constexpr slice(std::initializer_list<T> list)
: length(list.size()), ptr(list.begin()) {}
};
static_assert(slice<const int>({ 1, 2, 3 }).length == 3, "!!");
我得到的错误是:
1>test.cpp(12): error C2131: expression did not evaluate to a constant
1> visual studio 14.0\vc\include\initializer_list(50): note: failure was caused by an undefined arithmetic operation
initializer_list 的实现将所有方法标记为constexpr,看起来对我来说应该没问题...也许只是编译器问题?
【问题讨论】:
标签: c++ c++11 visual-c++ constexpr initializer-list