以下代码编译得很好:
struct A {
int i;
constexpr A() : i(1) { }
constexpr A(const A& that) : i(1) { }
};
constexpr auto func() {
std::array<A, 3> result = {};
return result;
}但是,如果我们将模板类型参数T添加到A中,
template<typename T> struct A {
int i;
constexpr A() : i(1) { }
constexpr A(const A<T>& that) : i(1) { }
};
constexpr auto func() {
std::array<A<int>, 3> result = {};
return result;
}编译器错误"constexpr函数'func‘不能导致常量表达式“。
这怎麽可能?
发布于 2019-02-02 22:07:36
是的,MSVC在C++14/17特性的实现上有(或仍然存在)一些问题,这显然也适用于constexpr。但是,在Visual 2017 15.9中,以下轻微的修改对我来说是有效的(而OP中的版本也会出现错误):
template<typename T> struct A {
int i;
constexpr A() : i(1) { }
constexpr A(const A<T>& that) : i(1) { }
};
constexpr auto func() {
return std::array<A<int>, 3>{};
}https://stackoverflow.com/questions/54497908
复制相似问题