抛出异常触发C4913警告

问题描述 投票:0回答:0

我有这样的代码:

#include <stdexcept>

namespace some_space {
    struct some_class{
    };

    some_class operator,(some_class a, float ){
        return a;
    }

    int a(int /*i*/, float /*f*/){
        // where in this function
        throw std::runtime_error("c4913");
    }
}

使用 MSVC 和

/W4
编译我得到这个警告:

<source>(13): warning C4913: user defined binary operator ',' exists but no overload could convert all operands, default built-in binary operator ',' used

我想知道为什么第 13 行

throw std::runtime_error("c4913");
会导致此警告。有人对此有解释吗?

此警告的doc仅列出了一个示例,其中使用了逗号运算符。但是,在这种情况下,我没有看到运算符的使用。

这里是显示此警告的 godbolt 的链接。我的想法是,也许宏会导致问题,但预处理器输出没有显示任何替换。

抛出像

int
这样的内置类型或可转换为
some_class
的类不会引起警告。 抛出任何其他类会触发警告。

c++ visual-c++ warnings
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.