Когда я использую MSVC для компиляции этой программы, я получаю сообщение об ошибке,
"Пример :: запрет неоднозначного вызова перегруженной функции"
Затем я обнаружил, что ключевое слово this
смогло устранить ошибку. Удивленный, я использовал rextester и обнаружил, что и Clang, и GCC смогли скомпилировать программу без ключевого слова this
.
Вот программа, о которой идет речь.
#include <iostream>
class Example {
public:
Example() {
auto lambda = [this]() {
//this->bar<int>(); // Using this allows the program to compile and run successfully.
bar<int>(); // This doesn't work in MSVC
};
lambda();
}
template<typename T>
void bar() {
std::cout << "(non-const) bar\n";
}
template<typename t>
void bar() const {
std::cout << "(const) bar\n";
}
};
int main() {
Example example;
}
В конечном счете, я спрашиваю, является ли ключевое слово this
необходимым в лямбда-выражении для устранения неоднозначности между функциями-членами const и не-const, и является ли MSVC правильным или GCC и Clang являются правильными.
Я использую Visual Studio 2017 и полная версия MSVC - 191627027