template <typename T>
struct MyT {};
template <typename T>
constexpr bool std::is_void_v<MyT<T>> = true;
static_assert(std::is_void_v<MyT<int>>);
在clang和gcc 中static_assert
正常工作。但msvc认为,is_void_v
仍然是false
。
https://godbolt.org/z/9r6YeaM91
我已经遇到过这样一个事实:在msvc中,有些事情的行为与纯 C++ 中的行为并不完全相同,但据我所知,可以使用编译器指令来调节这一点。也许这里也有一些指令?或者这纯粹是一个错误(功能))))?那么,或者如何将它们重新加载到msvc中?
正如 @user7860670 在评论中正确指出的那样(谢谢),我描述的情况是标准模板的自定义专业化。而对于这种情况,标准中也有相应的说明。
我的问题可以归因于此处讨论的主题的一个特殊情况