struct foo {
void bar(int&&) && { }
};
template<class T>
using bar_t = void (std::decay_t<T>::*)(int&&) /* add && if T is an rvalue reference */;
int main()
{
using other_t = void (foo::*)(int&&) &&;
static_assert(std::is_same<bar_t<foo&&>, other_t>::value, "not the same");
return 0;
}
我想要的typedef一個指向CV-和/或ref-合格成員函數
bar_t<T>
產量void (foo::*)(int&&)
如果T = foo
bar_t<T>
產量void (foo::*)(int&&) const
如果T = foo const
bar_t<T>
收率void (foo::*)(int&&) &
如果T = foo&
bar_t<T>
產生void (foo::*)(int&&) const&
如果T = foo const&
等。我怎樣才能做到這一點?
這是什麼用途? –
以與完美轉發的方式分配左值/右值相同的方式分配CV限定符。一般來說,假設CV和LR不變,但提供它是非常有價值的,特別是如果它是一個可以定義爲特徵的屬性。您不必爲每個變體編寫單獨的邏輯 - 因此「不變」 - 您將能夠對這些變體的組合進行歸納推理。 –