Tôi thấy hành vi khá lạ từ quan điểm của tôi: đối số mặc định chức năng không thể được chuyển tiếp trong mã dưới đây.Tại sao các tham số mặc định của hàm không thể được chuyển tiếp trong C++?
void Test(int test = int{}) {}
template<typename F, typename ...Args>
void Foo(F&& f, Args&&... args)
{
std::forward<F>(f)(std::forward<Args>(args)...);
}
int main()
{
Foo(Test, 0); // This compiles
Foo(Test); // This doesn't compile
}
Clang báo cáo: lỗi: quá ít đối số để gọi chức năng, dự kiến 1, có 0 GCC và báo cáo VC cùng lỗi.
Ai đó có thể giải thích được không?
Mã là ở đây: http://rextester.com/live/JOCY22484
ngắn thử nghiệm: 'auto f = Kiểm tra; f(); ' – 0x499602D2