Ari*_*iel 8 c++ namespaces c++11
我使用c ++ 11,而我需要一些来自c ++ 17库的类.当使用添加类的boost时,我希望执行以下操作:
#if __cplusplus < CPP17
using std::any = boost::any;
#endif
Run Code Online (Sandbox Code Playgroud)
不允许使用此类别名.同时扩展std命名空间会导致 未定义的行为.我希望我的代码看起来与c ++版本相同.有明确的方法吗?
明确的方法是为其添加自定义名称.
#if __cplusplus < CPP17
using my_any = boost::any;
#else
using my_any = std::any;
#endif
// using my_any...
Run Code Online (Sandbox Code Playgroud)
您似乎正在尝试在命名空间中创建类型别名.核心语法是:
namespace namespace_name {
using any = boost::any;
}
Run Code Online (Sandbox Code Playgroud)
但是,标准不允许在std命名空间中添加定义(模板特化的例外),因此如果您尝试定义std::any,程序的行为将是未定义的.
使用任何名称空间(包括全局名称空间)都可以,但不是保留给实现的名称空间,包括它的子名称空间std.