微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MSVC 14.16 中的静态内联 C++17 变量 - 这是编译器错误吗?

如何解决MSVC 14.16 中的静态内联 C++17 变量 - 这是编译器错误吗?

我有以下代码在 MSVC14.13 (15.6) 中完美编译:

template <typename T>
struct Quat
{
#pragma warning( push )
#pragma warning( disable: 4201 ) // warning about non-std anonymous structs

  union
  {
    struct { T x; T y; T z; T w; };
    T arr[4];
  };

#pragma warning( pop )

  Quat() {}
  Quat(T all) : x(all),y(all),z(all),w(all) {}

  static inline const Quat<T> kZero = Quat<T>(static_cast<T>(0));
};

int main()
{
  Quat<float> quat;
}

当我切换到 MSVC 14.16 (15.9) 时,出现以下错误

consoleapplication18.cpp(18): error C2027: use of undefined type 'Quat<float>'
consoleapplication18.cpp(23): note: see declaration of 'Quat<float>'
consoleapplication18.cpp(23): note: see reference to class template instantiation 'Quat<float>' being compiled

如果我注释掉 kZero 行,它编译得很好。在 g++10 中也能很好地编译,所以我想知道这是否真的是编译器错误

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。