4
#include <functional>

struct T {
    explicit operator bool() { return true; }
};

int main() {
    T t;

    if(t) {} // OK

    auto l = [&]() {
        if (t) {} // Error
    };
}

ここでの MSVC の動作は奇妙に一貫性がないように見えます。OK 行とエラー行の唯一の違いは、一方がラムダにあることです。これはバグですか?

4

1 に答える 1

5

これはバグですか?

はい、間違いなく。プログラムに問題はありませんbool。どちらの場合も変換演算子が呼び出されます。

于 2013-05-09T17:41:01.113 に答える