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

时间:2018-02-08 11:28:47

标签: c++ boost std undefined-behavior tr1

某些背景:

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

  

添加声明或定义是未定义的行为   namespace std或嵌套在std中的任何命名空间,只有几个   以下例外情况

还有关于SO的问题,也说这是一个UB,一个坏主意[23]。

我们在没有tr1支持的平台上使用boost::tr1(例如,WinCE,WM)。 Boost正是如此:如果未提供std::tr1,则将自己的实现注入tr1

例如boost/tr1/memory.hpp

namespace std{ namespace tr1{ 
   using ::boost::bad_weak_ptr;
   using ::boost::shared_ptr;
   ...
} }

我的问题是:

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

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

  • 如果可以的话,可以更进一步,将boost::tr1注入std而不是std::tr1吗?

0 个答案:

没有答案