diff options
Diffstat (limited to 'nrvo_by_default/rvo.cpp')
-rw-r--r-- | nrvo_by_default/rvo.cpp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/nrvo_by_default/rvo.cpp b/nrvo_by_default/rvo.cpp index f8c8f32..e8ac6fd 100644 --- a/nrvo_by_default/rvo.cpp +++ b/nrvo_by_default/rvo.cpp @@ -44,11 +44,22 @@ namespace return C{}; } + C make_prevent_rvo() + { + return std::move(C{}); + } + C make_nrvo() { C c; return c; } + + C make_prevent_nrvo() + { + C c; + return std::move(c); + } } int main() @@ -69,5 +80,41 @@ int main() std::cout << "C c = make_rvo()\n"; C c = make_rvo(); } + { + std::cout << "C c(make_nrvo())\n"; + C c(make_nrvo()); + } + { + std::cout << "C c{make_nrvo())\n"; + C c{make_nrvo()}; + } + { + std::cout << "C c = make_nrvo()\n"; + C c{make_nrvo()}; + } + { + std::cout << "C c(make_prevent_rvo())\n"; + C c(make_prevent_rvo()); + } + { + std::cout << "C c{make_prevent_rvo()}\n"; + C c{make_prevent_rvo()}; + } + { + std::cout << "C c = make_prevent_rvo()\n"; + C c = make_prevent_rvo(); + } + { + std::cout << "C c(make_prevent_nrvo())\n"; + C c(make_prevent_nrvo()); + } + { + std::cout << "C c{make_prevent_nrvo()}\n"; + C c{make_prevent_nrvo()}; + } + { + std::cout << "C c = make_prevent_nrvo()\n"; + C c = make_prevent_nrvo(); + } return 0; } |