Lambdas, нужно ли это ключевое слово для устранения неоднозначности константных / неконстантных функций-членов? - PullRequest
1 голос
/ 24 апреля 2019

Когда я использую 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

...