无法在 MSVC 1930+ 常量上下文中使用模板函数类型(视觉工作室 2022)
当我有这样的函数模板时:
template<class T>
T func(T bar) {
return bar;
}
我无法在最新的 MSVC 编译器的常量上下文中使用它的实例化:
constexpr bool b = std::is_function_v<decltype(func<int>)>; // fails with error C2131: expression did not evaluate to a constant
static_assert(std::is_compound_v<decltype(func<int>)>); // fails with C2057: expected constant expression
您可以在 编译器资源管理器。
它适用于较旧的 MSVC 版本以及 GCC 和 Clang。这是编译器错误还是预期行为?
When I have a function template like this:
template<class T>
T func(T bar) {
return bar;
}
I cannot use its instantiation in constant context with the latest MSVC compiler:
constexpr bool b = std::is_function_v<decltype(func<int>)>; // fails with error C2131: expression did not evaluate to a constant
static_assert(std::is_compound_v<decltype(func<int>)>); // fails with C2057: expected constant expression
You can test it yourself in compiler explorer.
It works with older MSVC versions and with GCC and Clang. Is it a compiler bug, or is it expected behavior?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论