小编Jac*_*ood的帖子

C++17:将函数 noexcept 说明符推导为非类型参数

我注意到 MSVC 有时无法推导出其他编译器接受的非类型参数,最近遇到了一个涉及函数 noexcept 说明符的简单示例(自 C++17 以来,它是函数签名的一部分):

template <typename T> struct is_nocv_method : public std::false_type { };

template <typename ReturnT, typename ClassT, bool IsNoexcept, typename... Args>
struct is_nocv_method<ReturnT (ClassT::*)(Args...) noexcept(IsNoexcept)> : std::true_type { };

Run Code Online (Sandbox Code Playgroud)

Godbolt 建议 gcc 12.1 和 clang 14.0 毫无问题地接受这一点,但 MSVC 14.31 (cl.exe 19.31) 无法编译,声称IsNoexcept无法推断。这是编译器缺陷吗?

演示

c++ templates noexcept c++17

7
推荐指数
1
解决办法
318
查看次数

标签 统计

c++ ×1

c++17 ×1

noexcept ×1

templates ×1