template<typename T>
struct Outer
{ struct Inner : T
{ constexpr Inner() {}
}
m;
};
struct NonConstexpr
{ NonConstexpr() {}
};
int main() { Outer<NonConstexpr> o; }
В Visual C ++ (2015 и 2017) это приводит к error C3615: constexpr function 'Outer<NonConstexpr>::Inner::Inner' cannot result in a constant expression
И G ++, и Clang принимают код. Это ошибка в компиляторе Microsoft?
Проводник компилятора:
https://godbolt.org/g/SfZfMh
Edit:
Чтобы уточнить, это работает, если мы сделаем Inner шаблон. Но это становится немного уродливым.
template<typename T>
struct Outer
{ template<typename T_>
struct Inner : T_
{ constexpr Inner() {}
};
Inner<T> m;
};