非const constexpr成员函数无法使用英特尔编译器

时间:2017-12-14 13:34:45

标签: c++ c++14 constexpr icc

考虑以下示例:

#include <array>

class int_wrapper {
    public:
        constexpr int_wrapper()
            : i(0)
        {}

        constexpr auto
        value() -> int& {
            return i;
        }
        constexpr auto
        value() const -> const int& {
            return i;
        }

    private:
        int i;
};

constexpr auto
f() -> int_wrapper {
    int_wrapper w;
    w.value() = 10;
    return w;
}

auto g() {
    constexpr auto w = f();

    std::array<double,w.value()> a;
}

非const constexpr成员函数似乎是c ++ 14的一个特性。 它使用-std = c ++ 17编译gcc和clang。

使用icpc 17.0.4,它无法在我的机器上编译:

test.cpp(14): error: cannot overload functions distinguished by return type alone
          value() const -> const int& {
          ^

test.cpp(11): error: qualifiers dropped in binding reference of type "int &" to initializer of type "const int"
              return i;
                     ^

在条目“修复没有const的constexpr成员函数”时似乎与this一致。 然而它与icpc 17 here编译得很好!所以我的问题是为什么它与godbolt上的icpc编译得很好但不能在我的机器上编译? icpc的次要版本之间是否存在功能差异?或者是否有一些我不知道的依赖于安装的东西?

0 个答案:

没有答案