For this code:
struct S { S(int m): m(m) {} constexpr int f() const { return m; } int m; }; int main() { S s(1); }
it compiles without warnings or errors using clang 3.6, 3.7 and 3.8 with -std=c++14 . But in g ++ 5.x the following errors occur:
main.cpp:4:19: error: enclosing class of constexpr non-static member function 'int S::f() const' is not a literal type constexpr int f() const { return m; } ^ main.cpp:1:8: note: 'S' is not literal because: struct S ^ main.cpp:1:8: note: 'S' is not an aggregate, does not have a trivial default constructor, and has no constexpr constructor that is not a copy or move constructor
Which compiler is right and why?
I reviewed the requirements in C ++ 14 [dcl.constexpr] / 3, which states that for a constexpr function "each of its parameter types must be a literal type", but this section does not explicitly mention the member of the function, and does not say whether the implied *this parameter for the purpose of this sentence.
source share