4
#include <type_traits>
using namespace std;
struct asd{
void f();
};
int f();
typedef typename result_of<decltype(f)>::type result_free;
typedef typename result_of<decltype(&asd::f)>::type result_mem;
兩個類型定義給出錯誤的result_of不工作對我來說
In file included from ../main.cpp:1:0:
/usr/include/c++/4.6/type_traits: In instantiation of ‘std::_Result_of_impl<false, false, int>’:
/usr/include/c++/4.6/type_traits:1215:12: instantiated from ‘std::result_of<int()>’
../main.cpp:10:41: instantiated from here
/usr/include/c++/4.6/type_traits:1192:9: error: ‘std::declval [with _Tp = int, typename std::add_rvalue_reference<_Tp>::type = int&&]()’ cannot be used as a function
../main.cpp:10:43: error: invalid combination of multiple type-specifiers
../main.cpp:10:59: error: invalid type in declaration before ‘;’ token
../main.cpp:11:49: error: ‘type’ in ‘struct std::result_of<void (asd::*)()>’ does not name a type
../main.cpp:11:64: error: invalid type in declaration before ‘;’ token
爲什麼不這段代碼編譯,甚至(用gcc 4.6.2工作),如果我追加一個'()'引起在該行的'T'後錯誤? http://ideone.com/pVbBz我迷路了,我認爲'decltype(&f)'的目的是獲得「變量」f的類型,如果我有一個模板參數而不是'decltype'它應該沒問題... – 2012-02-03 17:31:03
@LorenzoPistone這個例子有兩個明顯的錯誤:試圖使用'result_of',它不存在,並且取得'main'的地址。至於沒有使用「函數返回函數」,如果你的結果是'result_of ',其中T是函數類型,那麼這是一個很好的問題。 –
Cubbi
2012-02-03 18:52:26
@LorenzoPistone從不知道,只是result_of不採用函數類型,其中'T'就是你的情況。引用標準時,'Fn應該是可調用類型,對函數的引用或對可調用類型的引用。如果你'std :: add_lvalue_reference'並且不要忘記括號,它就會起作用。 – Cubbi 2012-02-03 18:59:04