高达4.5的GCC没有标准的C ++ 0x类型特征模板has_nothrow_move_constructor
。我可以在我的包中使用它进行优化,但我不想排除其中一个常见的编译器,也不希望使用HAVE_STD_HAS_NOTHROW_MOVE_CONSTRUCTOR
之类的符号重载配置。是否可以使用该模板(如果存在),如果不存在而不使用使用任何预定义的配置符号,则回退到复制?我也不想依赖Boost,因为我的库很小,并且由于其他原因不需要Boost。
在伪代码中,我需要类似的东西:
template <typename type>
struct has_nothrow_move_constructor_robust
: public integral_constant <bool,
/* if possible */ has_nothrow_move_constructor <type>::value
/* otherwise */ false>
{ };
由于移动构造函数仅适用于C ++ 0x,因此我不介意使用其他C ++ 0x功能进行上述定义,如果可能的话。
答案 0 :(得分:1)
boost::variant
有一个has_nothrow_move
的实现供自己内部使用 - 你可以使用它,虽然它不像正确的编译器实现那样可靠。它的来源是here - 我不知道它有多可靠,所以YMMV。
除此之外,您可以测试编译器版本宏(__GNUC__
and __GNUC_MINOR__
)以确定存在,如果不存在则将其存根。不幸的是,G ++的任何已发布版本似乎都不支持has_nothrow_move_constructor
,因此您必须等待一段时间才能知道要使用的正确版本。