1
我嘗試使用下面的結構來檢查成員函數的基礎上this answer的存在,我以前有:誤差decltype模板,msvc2013
template <typename T, class = double>
struct has_a : std::false_type {};
template <typename T>
struct has_a<T, decltype(std::declval<T>().a())> : std::true_type {};
這工作得很好用gcc 4.9.2 ,但失敗msvc2013編譯:
錯誤C2228:左 '一個' 必須有類/結構/聯合類型是 'add_rvalue_reference < _Ty> ::型'
看起來(?)像這是一個編譯器錯誤,因爲declval
明確應該在未評估的decltype
表達式(see here)內工作。有沒有已知的解決方法?
這依賴於[表達式SFINAE](http://stackoverflow.com/questions/12654067/what-is-expression-sfinae#12654277),但MSVC2013 [不支持它](https:// msdn。 microsoft.com/en-us/library/hh567368.aspx)(儘管我知道他們有一些SFINAE功能可以用於下一個版本)。 – TartanLlama
@TartanLlama這就是我所擔心的。有沒有一個類似的習語不會打破視覺工作室? –
@NicolasHolthaus [嘗試這個](http://rextester.com/BMCKE70673) –