相关疑难解决方法(0)

GCC和Clang对constexpr构造函数的不同行为

对于这个结构:

struct Wrapper {
    int value;

    constexpr explicit Wrapper(int v) noexcept : value(v) {}
    Wrapper(const Wrapper& that) noexcept : value(that.value) {}
};
Run Code Online (Sandbox Code Playgroud)

而这个功能:

constexpr Wrapper makeWrapper(int v)
{
    return Wrapper(v);
}
Run Code Online (Sandbox Code Playgroud)

以下代码无法为Clang(Apple LLVM版本7.3.0)编译,但是对于GCC(4.9+)编译良好,两者都具有-Wall -Wextra -Werror -pedantic-errors:

constexpr auto x = makeWrapper(123);
Run Code Online (Sandbox Code Playgroud)

Clang抱怨说"非constexpr构造函数'Wrapper'不能用于常量表达式." 哪个编译器是对的?

c++ c++11

14
推荐指数
1
解决办法
1008
查看次数

标签 统计

c++ ×1

c++11 ×1