標籤:

C++的完美轉發只能針對形如T &&的形參嗎?

例如對於函數

template& class T, typename U&>

void foo(T& val)

{

// ....

}

我用的g++-4.9隻能匹配右值,無法匹配左值。

這樣的話該怎樣實現完美轉發,我不想再寫一次這個函數。


做這種事情的關鍵是你要明白(T) == T,這就是為什麼別人的完美轉發都能接受左值引用,而你的不行。T&無法被推導成X,你把它改掉就好了。至於如何保證參數一定是T&,用一句static_assert就可以搞定了。


我猜題主的需求是在foo中要使用到T和U的信息,那麼可以這樣寫:

// 一個利用特化提取類型的Helper類
template &
struct Decompose;

template &