9

ユニバーサル参照引数を持つコンストラクターを持つクラスで右辺値の最適化が行われないのはなぜですか?

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
4

1 に答える 1