我在使用add_const
typetrait應用於轉發引用類型的場景中。一切看起來像沒有常量被添加到類型,所以我做了一個小例子來驗證是這種情況(PrintType
是一個不完整的類型,將導致編譯錯誤,迫使編譯器吐出錯誤中的模板參數的名稱消息):add_const將不適用於轉發引用
#include <iostream>
#include <type_traits>
#include <complex>
template <class T>
struct PrintType;
template <class T>
void f(T&& arg)
{
PrintType<std::add_const_t<decltype(arg)>> local;
(void)local;
}
int main()
{
std::complex<double> co;
f(co);
}
錯誤消息says:
main.cpp: In instantiation of 'void f(T&&) [with T = std::complex<double>&]':
main.cpp:20:9: required from here
main.cpp:12:48: error: 'PrintType<std::complex<double>&> local' has incomplete type
PrintType<std::add_const_t<decltype(arg)>> local;
即性狀轉化的我的類型的T = std::complex<double>&
代替T = std::complex<double> const&
爲了清楚起見,您希望根據參數的右值來查看'PrintType const&gt;或'PrintType const &&>'? –
TBBle