Возможен ли макрос для конструкторов по умолчанию, ожидается поддержка компилятора?
struct Foo {
int data;
Foo() = default;
Foo(const Foo& arg) = default;
};
Но у моего компилятора еще нет конструкторов по умолчанию.
Могу ли я определить макрос как DEFAULTED
стоять за = default
? Если он просто покинул линию как
Foo(const Foo& arg);
будет ли компилятор по-прежнему генерировать его по умолчанию, или он будет жаловаться?
1 ответ
Решение
Конечно вы можете:
#if __cplusplus == 201103L
# define DEFAULTED(func) func = default;
#else
# define DEFAULTED(func)
#endif
struct foo
{
DEFAULTED(foo())
};
Однако: некоторые компиляторы поддерживают части C++11 и могут устанавливать __cplusplus
в 201103L
даже если они не поддерживают конструкторы по умолчанию.