038-move-semantics.md の「コピーとムーブの判別」でobjectがlambdaにcaptureされていない
Opened this issue · 0 comments
sylph01 commented
再現コード
#include "../all.h"
void f(const int &){
std::cout << "lvalue\n";
}
void f(const int &&){
std::cout << "rvalue\n";
}
int main(){
int object {};
f(object);
f(object + object);
f([&]{ return object; }());
f(std::move(object));
}
実行結果
$ g++ -std=c++17 -Wall lvalue-and-rvalue.cpp
lvalue-and-rvalue.cpp: In lambda function:
lvalue-and-rvalue.cpp:15:16: error: ‘object’ is not captured
15 | f([]{ return object; }());
| ^~~~~~
lvalue-and-rvalue.cpp:15:6: note: the lambda has no capture-default
15 | f([]{ return object; }());
| ^
lvalue-and-rvalue.cpp:11:7: note: ‘int object’ declared here
11 | int object {};
| ^~~~~~
おまけ
https://twitter.com/TartanLlama/status/1283816537778982914 を思い出した。
試しに object
を constexpr
にしたらコンパイルされた。