私有typedef的公共使用是否可移植?

lam*_*fun 18 c++ typedef

class Settings
{
private:
    typedef std::map<std::string, SettingsOption> OptionMap;

public:
    typedef OptionMap::iterator iterator;
    typedef OptionMap::const_iterator const_iterator;

    ...
};
Run Code Online (Sandbox Code Playgroud)

这段代码是否可移植?标准的含义是什么?

CB *_*ley 25

它是合法的,Settings::iterator并且Settings::const_iterator可供Settings班级的所有用户访问.

C++中的访问控制纯粹应用于名称.ISO/IEC 14882:2011 11 [class.access]/4中有一个注释和示例,表明这是意图.

[...] [ 注意:由于访问控制适用于名称,如果将访问控制应用于typedef名称,则仅考虑typedef名称本身的可访问性.不考虑typedef引用的实体的可访问性.例如,

class A {
  class B { };
public:
  typedef B BB;
};

void f() {
  A::BB x; // OK, typedef name A::BB is public
  A::B y; // access error, A::B is private
}
Run Code Online (Sandbox Code Playgroud)

- 结束说明 ]