在嵌套类型中保留volatile

wim*_*aan 1 c++ templates

template<typename T>
struct S {
    using type = T;
};

volatile S<int> s;

template<typename T>
void f(T& v) {
    using n = typename T::type;

    S<n>::_; // to show

}

int main() {
     f(s);
}
Run Code Online (Sandbox Code Playgroud)

fT 被推断为volatile S<int>,但n仅仅是int.我有什么做的保护volatile,也就是说,有nvolatile int

Dan*_* Z. 6

using n = typename std::conditional< std::is_volatile<T>::value, 
            volatile typename T::type,
            typename T::type >::type;
Run Code Online (Sandbox Code Playgroud)

添加volatilenif Tvolatile.