为什么std :: atomic_ {char,schar等} typedef允许是std :: atomic <T>的基类的typedef,而不是仅仅是atomic <T>?

Jef*_*den 10 c++ stl atomic c++-standard-library c++11

C++ 11 [atomics.types.generic] p7:

应该有与atomic表145中规定的整数特化相对应的命名类型,以及atomic_bool与指定的对应的命名类型atomic<bool>.每个命名类型都是相应特化的typedef 相应特化的基类.如果它是基类,它应支持与相应的特化相同的成员函数.

(重点补充)

对于所有其他类型而言,std::atomic_char不相同的理由是什么std::atomic<char>,等等?这实现了什么灵活性,为什么它有用?乍一看,我不明白为什么不需要std::atomic<T>直接将typedef作为typedef .

请注意,提出的N2427<atomic>表明typedef完全是特化,而不是基类.

ipa*_*dop 2

它可能在那里,因为有人已经使用类型作为基类实现了原子std::atomic_*,并对这种方法提出了足够的抱怨/提供了一个很好的论据。

MSVC中建议了这样的实现。

指出

删除atomic_...命名类型和原子模板类的相应特化之间的定义基类关系。基类关系现在依赖于实现。此更改确保了与 C 的兼容性。以前从基类继承的一些成员函数和运算符必须从命名类型提升到特化。