如何将低级别const应用于模板变量.我正在尝试编写一个const_cast实现

Moh*_*hit 4 c++ templates c++11

如何static_assert在我的失败代码中进行此传递?我试过的所有排列const周围T,但我没能得到const int *.编译器总是把它解释为int * const.

template <class T>
union const_cast_impl {

    using CT =  const T;
    static_assert(std::is_same<CT,const int *>::value, "CT is not const int*");

    T data;
    CT cdata;

    const_cast_impl(CT ptr):cdata(ptr){}

    operator T(){
        return data;
    }
};

int main(){
    int a = 2;
    const int *ptr = &a;
    int *ptr2 = const_cast_impl<int *>(ptr);
}
Run Code Online (Sandbox Code Playgroud)

Pra*_*ian 6

您可以使用std::conditional正确处理指针类型.

using CT = typename std::conditional<
                std::is_pointer<T>::value,
                typename std::remove_pointer<T>::type const *,
                T const
            >::type;
static_assert(std::is_same<CT,const int *>::value, "CT is not const int*");
Run Code Online (Sandbox Code Playgroud)