ラムダの中でメンバ関数を呼び出すときに問題が発生し、捕捉されたthis
が見つかりました。関数のconstバージョンと非constバージョンがあり、型にテンプレート化されています。これをラムダで捕捉するためのメンバ関数への曖昧な呼び出し
次のコードがエラーを示しています
struct TEST
{
template <typename T>
void test() {}
template <typename T>
void test() const {}
TEST()
{
[this]()
{
test<void>();
}();
}
};
メッセージ:http://rextester.com/MLU2098
source_file.cpp(13): error C2668: 'TEST::test': ambiguous call to overloaded function
source_file.cpp(7): note: could be 'void TEST::test<void>(void) const'
source_file.cpp(4): note: or 'void TEST::test<void>(void)'
source_file.cpp(13): note: while trying to match the argument list '()'
Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23506 for x64
を私はこの行動が正しかったかどうかわからなかったし、Microsoftのコンパイラでだけの問題なので、私がテストしましたコンパイラエクスプローラでgccとclangを使ってコードをコンパイルし、両方ともエラーなしでコードをコンパイルしました。
ここで正しい動作を表示しているコンパイラはどれですか?
を(http://rextester.com/MLU2098)[ここMSVCとREPROです] – AndyG