考慮下面的代碼:__LINE__拉姆達inconsistenly評估則傳遞給函數宏
1. #include <iostream>
2. #define CALL_FUNC(f) f();
3.
4. int main()
5. {
6. CALL_FUNC([](){
7. std::cout << "I'm on line " << __LINE__ << std::endl;
8. });
9. return 0;
10. }
當我編譯這在Visual Studio 2012和g ++ 4.7.3,我得到的輸出「我在線8「。
當我在clang中編譯這個時,我得到了輸出結果「我在第7行」,這是我的預期。
有誰知道這些是正確的行爲?有沒有辦法在VS和g ++中獲得所需的行爲,同時還有一個CALL_FUNC宏?
ideone(克++ 4.7.2示出了線9 ...的http:// ideone
這可以如下來證明.com/afoTTj;但這可能只是一些編輯器不匹配 – Asaf
@Asaf你在'#include'和'#define之間添加了一個換行符 – Rapptz
我只是想看看你是否注意了...是... – Asaf