我有一些爲Clang 3.2寫的代碼,我試圖在VC++ 12中運行端口。 Clang 3.2+和GCC 4.8沒有問題,但VC++ 12抱怨。下面是產生這一問題的最小片段:解決VC++ 12中的模板專業化錯誤?
template <int(*ptr)()>
class foo {};
template<int N>
int ReturnsN() { return N; }
template<int N>
class bar {
typedef foo<ReturnsN<N>> fooN;
};
現在,我敢肯定這是一個編譯器缺陷(但請讓我知道,如果它是不是!)給出的錯誤是:
'specialization' : cannot convert from 'int (__cdecl *)(void)' to 'int (__cdecl *)(void)'
那麼有沒有人知道一個體面的工作?看來編譯器確信專業功能沒有完全定義。
編輯:我也應該注意我已經試過這個股票編譯器和2013年11月的CTP。兩者都有同樣的問題。
我很想知道是否刪除了'inline'會有什麼不同。 – WhozCraig
@WhozCraig哦,對不起,它沒有。我認爲它做到了,並將其從我的測試項目中留下。將編輯我的問題。 –
我假設你也嘗試過'foo <&ReturnsN>'也? (如果有效的話,我現在開始銷售我的MS股票)。 (另外,我在這裏沒有看到專業化,只是實例化)。 –
WhozCraig