默认构造函数的宏可能,等待编译器支持?

时间:2012-06-19 09:55:35

标签: c++ constructor c++11 c++03

struct Foo {
    int data;
    Foo() = default;
    Foo(const Foo& arg) = default;
};

但是我的编译器doesn't have defaulted constructors yet

我可以定义像DEFAULTED这样的宏代表= default吗?如果它只是将该行留作

    Foo(const Foo& arg);

编译器是否仍会生成其默认值,还是会抱怨?

1 个答案:

答案 0 :(得分:2)

当然你可以:

#if __cplusplus == 201103L
# define DEFAULTED(func) func = default;
#else
# define DEFAULTED(func)
#endif

struct foo
{
    DEFAULTED(foo())
};

但是:有些编译器支持C ++ 11的部分内容,并且可能会将__cplusplus设置为201103L,即使它们不支持默认构造函数。