C++ CRTP名称查找

Rob*_*son 5 c++ templates crtp

为什么这段代码无法编译(未声明的标识符'x',g ++ 4.9和clang ++ 3.5)?

template <class T>
struct base {
    int x;
};

template <class U>
struct end : public base<U> {
    end() {
        x = 5;
    }
};
Run Code Online (Sandbox Code Playgroud)

注意:明确指定this->x可以解决问题.

qua*_*dev 6

它不会编译,因为在名称查找期间会忽略依赖基类,并且base它是依赖基类.

你可以使用this指针:

end() {
    this->x = 5;
}
Run Code Online (Sandbox Code Playgroud)

或者只是明确地命名基类:

end() {
    base::x = 5;
}
Run Code Online (Sandbox Code Playgroud)

注意: