Tôi đã gặp sự cố khi cố gắng gọi hàm thành viên bên trong lambda cho một ảnh chụp this
. Có một phiên bản const và không const của hàm và nó được tạo kiểu trên một kiểu.Gọi mơ hồ đến chức năng thành viên để ghi hình này trong lambda
Ví dụ dưới đây các lỗi:
struct TEST
{
template <typename T>
void test() {}
template <typename T>
void test() const {}
TEST()
{
[this]()
{
test<void>();
}();
}
};
Messages: 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
Tôi đã không chắc chắn nếu hành vi này là đúng và chỉ là một vấn đề với trình biên dịch Microsoft, vì vậy tôi đã thử nghiệm mã với gcc và clang trong trình thám hiểm trình biên dịch và cả hai đều biên dịch mã mà không có lỗi.
Trình biên dịch nào đang hiển thị hành vi đúng ở đây?
[Đây là một repro với MSVC] (http://rextester.com/MLU2098) – AndyG