考虑以下示例:
#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的次要版本之间是否存在功能差异?或者是否有一些我不知道的依赖于安装的东西?