2012-09-13 68 views
4
template<class T> 
std::vector<T> convert(int argument) 
{ 
} 

int main() 
{ 
    decltype(&convert<int>); 
    return 0; 
} 

下面給出了這個錯誤的Visual Studio 2010:不正確的說法爲 'decltype'

error C3555: incorrect argument to 'decltype' 

爲什麼?

我正在創建一個std :: map,其中的鍵是一個枚舉,並且該值是一個函數。

+1

不應該是'std :: function'通過函數指針嗎? – Puppy

+0

http://liveworkspace.org/code/23dd38ae5a2a1e6c3fcf0428dbf7f649工作正確。 – ForEveR

+0

看起來像一個編譯器錯誤。請注意'decltype'行沒有任何影響。 –

回答

8

VS2010 bug。該鏈接也有一個解決方法:

template <typename T> T identity(T); 
decltype(identity(&convert<int>)); 
+0

該行:std :: map ))> convert_functions;正在給出對話框:Microsoft(R)C/C++優化編譯器已停止工作:( – Baz

+0

@Baz:您可能需要typedef才能捕獲結果,但這是在變通方法上堆疊變通方法。 – MSalters