使用反向移植代码扩展std命名空间

AMA*_*AMA 6 c++ boost tr1 std undefined-behavior

一些背景:

扩展namespace std是未定义的行为(UB),除非它是模板特化[ 1 ]:

将声明或定义添加到命名空间std或嵌套在std中的任何命名空间是未定义的行为,下面列出了一些例外情况

此外,还对做题也说这是一个UB和一个坏主意[ 2,3 ].

我们boost::tr1在没有tr1支持的平台上使用(例如,WinCE,WM).Boost就是这样做的:将自己的实现注入std::tr1if tr1中.

例如boost/tr1/memory.hpp:

namespace std{ namespace tr1{ 
   using ::boost::bad_weak_ptr;
   using ::boost::shared_ptr;
   ...
} }
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  • 这是否意味着如果boost::tr1与非tr1编译器一起使用它是UB ?

  • 或者,std只要开发人员确保反向移植的功能不可用,是否可以注入反向移动?

  • 如果它是好的,可以在一个把它一步,注入boost::tr1std代替std::tr1