2013-05-09 17 views
4
#include <functional> 

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

int main() { 
    T t; 

    if(t) {} // OK 

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

MSVC的行爲在這裏看起來奇怪地不一致; OK行和Error行之間的唯一區別在於它是一個lambda表達式。這是一個錯誤?在lambda中沒有調用顯式運算符bool - MSVC錯誤?

+1

請提供全文的錯誤信息? – 2013-05-09 18:04:54

+1

另外,什麼編譯器版本,平臺和版本? – 2013-05-09 18:05:33

+0

編譯器來自Visual Studio 2012 Express,並進行11月CTP升級,並將其自身標識爲「Microsoft(R)C/C++優化編譯器版本17.00.51025,適用於x86' 並且它給出了'錯誤C2451:類型爲'T'的條件表達式'是非法的 沒有可以執行此轉換的用戶定義轉換運算符,或者不能調用運算符' – rogual 2013-05-10 19:26:18

回答

6

這是一個錯誤?

是的,絕對。在你的程序中沒有錯誤,在這兩種情況下都應調用bool轉換運算符。