Моя текущая программа отклоняется 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 - это неправильно? Программа должна быть легальной С++ 11.
Интересный побочный эффект. Если one
реализуется внутри структуры, clang больше не жалуется:
struct A {
static constexpr inline int one() { return 1; }
}
gcc также принимает этот вариант. По моему мнению, обе версии должны быть идентичными в соответствии со стандартом. Это ошибка clang или я что-то не хватает?