Возможен ли макрос для конструкторов по умолчанию, ожидается поддержка компилятора?

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 даже если они не поддерживают конструкторы по умолчанию.

Другие вопросы по тегам