ユニバーサル参照引数を持つコンストラクターを持つクラスで右辺値の最適化が行われないのはなぜですか?
http://coliru.stacked-crooked.com/a/672f10c129fe29a0
#include <iostream>
template<class ...ArgsIn>
struct C {
template<class ...Args>
C(Args&& ... args) {std::cout << "Ctr\n";} // rvo occurs without &&
~C(){std::cout << "Dstr\n";}
};
template<class ...Args>
auto f(Args ... args) {
int i = 1;
return C<>(i, i, i);
}
int main() {
auto obj = f();
}
出力:
Ctr
Ctr
Dstr
Ctr
Dstr
Dstr