我当前的程序被clang拒绝,但用gcc编译得很好。它归结为以下简化示例:
struct A {
static constexpr inline int one();
};
inline constexpr int A::one() { return 1; }
int main() {
return 0;
}
g++ 4.7.2 编译它没有错误(g++ -std=c++11 -Wall -g -o main example.cpp
)。clang++ 3.1 拒绝它:
$ clang++ -std=c++11 -Wall -g -o main example.cpp
example.cpp:6:25: error: conflicting types for 'one'
inline constexpr int A::one() { return 1; }
^
example.cpp:3:31: note: previous declaration is here
static constexpr inline int one();
^
1 error generated.
我敢打赌 gcc 是对的,而 clang 是错的?该程序应该是合法的 C++11。
有趣的旁注。如果one
在结构中实现,clang 不再抱怨:
struct A {
static constexpr inline int one() { return 1; }
}
gcc 也接受这个变体。据我了解,根据标准,两个版本应该是相同的。这是一个clang错误还是我错过了什么?