提问人:AMA 提问时间:2/8/2018 最后编辑:AMA 更新时间:2/8/2018 访问量:176
使用向后移植的代码扩展 std 命名空间
Extending std namespace with backported code
问:
一些背景:
扩展是未定义行为 (UB),除非它是模板专业化 [1]:namespace std
向其添加声明或定义是未定义的行为 命名空间 std 或嵌套在 std 中的任何命名空间,有几个 例外情况如下
还有关于SO的问题,也说这是一个UB和一个坏主意[2,3]。
我们在不支持的平台上使用 boost::tr1
(例如 WinCE、WM)。Boost 正是这样做的:将自己的实现注入到 if 中。tr1
std::tr1
tr1
例如,在 boost/tr1/memory.hpp
中:
namespace std{ namespace tr1{
using ::boost::bad_weak_ptr;
using ::boost::shared_ptr;
...
} }
我的问题是:
这是否意味着如果与非 tr1 编译器一起使用,它是 UB?
boost::tr1
或者,只要开发人员确保向后移植的功能不可用,就可以向后移植注入吗?
std
如果没问题,可以更进一步,注入而不是?
boost::tr1
std
std::tr1
答: 暂无答案
评论
mystd
std_
typename = std::enable_if<....>
using