Tôi đã đọc những câu hỏi liên quan sau đây:Tại sao không phải là tiêu chuẩn :: result_of <int(int)> :: loại hợp lệ?
và the page on std::result_of
at cppreference.com.
Tất cả trong số họ dường như chỉ ra rằng tôi nên có thể sử dụng:
std::result_of<int(int)>::type v1 = 10;
Tuy nhiên, khi tôi đã cố gắng xây dựng các chương trình sau đây sử dụng g ++ 4.9.2
#include <type_traits>
int foo()
{
return 0;
}
int main()
{
std::result_of<int(int)>::type v1 = 10; // LINE A
std::result_of<decltype(foo)>::type v2 = 20; // LINE B
return 0;
}
tôi nhận được thông báo lỗi cho "LINE A" và "LINE B". Các thông báo lỗi là:
socc.cc: In function ‘int main()’:
socc.cc:10:5: error: ‘type’ is not a member of ‘std::result_of<int(int)>’
std::result_of<int(int)>::type v1 = 10;
^
socc.cc:11:5: error: ‘type’ is not a member of ‘std::result_of<int()>’
std::result_of<decltype(foo)>::type v2 = 20;
^
Lệnh tôi sử dụng để biên dịch:
g++ -std=c++11 -Wall socc.cc -o socc
FWIW, sử dụng
typename std::result_of<int(int)>::type v1 = 10;
typename std::result_of<decltype(foo)>::type v2 = 20;
không tạo sự khác biệt.
Có vẻ như tôi không hiểu cách result_of
được cho là được sử dụng.
Bạn có thể giải thích tại sao tôi gặp phải lỗi trình biên dịch không?
Bạn có nghĩa là 'result_of <(int (int)) (int)>'? –
lưu ý rằng 'result_of' đã thay đổi từ C++ 11 thành C++ 14, bạn có thể xác nhận bạn đang hỏi về phiên bản C++ 11 không? –
@KerrekSB, Không, ý tôi là 'result_of <(int(int))>'. Đó có thể là phần thiếu hiểu biết của tôi về 'result_of'. Bạn sẽ giải thích về điều đó? –