code-prettify

2015年4月29日 星期三

Visual Studio Qt IntelliSense: 無法開啟來源檔案 "initializer_list"

Visual Studio Qt IntelliSense: 無法開啟來源檔案 "initializer_list"

完整的訊息如下:
IntelliSense: 無法開啟來源檔案 "initializer_list"
IntelliSense:  內嵌規範只能用於函式宣告
IntelliSense:  namespace "std" 沒有成員 "initializer_list"
IntelliSense:  必須是 ')'
IntelliSense:  必須是 ';'
IntelliSense:  class "QStringList" 沒有成員 "sort"

一開始因為有些專案會出現,有些不會,所以沒有發現原因,
後來發現原因是 Visual Studio 2013 指定平台工具組為 Visual Studio 2012,
也就是使用 VS 2013 為 IDE,但是 compiler toolchain 使用 VS 2012 進行編譯。

一些程式的寫法是用 Visual Studio 的版本來判斷是否支援某些寫法,像是 C++11 之類的,
這時候因為使用的 IDE 版本跟編譯器不一致,導致 VS 的 IntelliSense 誤判。

目前的解決方法是強制設定這些專案的 VS 版本為 2012,
在專案屬性宣告 _MSC_FULL_VER=170061030 即可。