https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60512
--- Comment #13 from Alex Coplan <acoplan at gcc dot gnu.org> ---
Clang recognizes the "cxx_defaulted_functions" feature to detect whether "=
default" functions are supported.
It's clear that __has_feature (cxx_defaulted_functions) should evaluate to 1
for -std=c++11 and above. It's less clear whether GCC intends to support "=
default" functions in C++98 mode as an extension, and therefore whether
__has_extension (cxx_defaulted_functions) should evaluate to 1 with -std=c++98.
I noticed that e.g. we accept:
struct S {
int x;
S(int a) : x(a) {}
S() = default;
};
void f() {
S s;
}
with -std=c++98 and emit a -Wc++11-extensions warning. This suggests that "=
default" might be supported as an extension, but it's not clear. By contrast,
it seems that deleted functions (detected with "cxx_deleted_functions") aren't
supported in C++98 mode, since e.g.
struct S {
S() = delete;
};
void f() {
S s;
}
doesn't get rejected with -std=c++98. It would be good to get some input from
C++ maintainers on the cxx_defaulted_functions case.