gpt4 book ai didi

c++ - 尝试从可变函数模板调用基本情况重载的编译器错误

转载 作者:行者123 更新时间:2023-11-28 04:52:20 25 4
gpt4 key购买 nike

我正在尝试编写一个调用单参数重载作为基本情况的可变参数模板函数。基本情况不能在我的可变参数之前声明,因为它们涉及在其他地方定义的类型。我需要这个来与 gcc-4.7.2 一起工作。我有以下 MWE。

template<class T, class U, class... Args>
void print(T const& t, U const& u, Args const&... args)
{
print(t);
print(u, args...);
}

void print(int){}
void print(float){}

int main(int, char*[])
{
int i;
float f;
print(i, f);
}

我的原版使用 VC,但此 MWE 在 gcc-4.7.2 中失败并显示以下内容。

main.cpp: In instantiation of ‘void print(const T&, const U&, const Args& ...) [with T = int; U = float; Args = {}]’:
main.cpp:15:12: required from here
main.cpp:4:2: error: no matching function for call to ‘print(const int&)’
main.cpp:4:2: note: candidate is:
main.cpp:2:6: note: template<class T, class U, class ... Args> void print(const T&, const U&, const Args& ...)
main.cpp:2:6: note: template argument deduction/substitution failed:
main.cpp:4:2: note: candidate expects 3 arguments, 1 provided
main.cpp:5:2: error: no matching function for call to ‘print(const float&)’
main.cpp:5:2: note: candidate is:
main.cpp:2:6: note: template<class T, class U, class ... Args> void print(const T&, const U&, const Args& ...)
main.cpp:2:6: note: template argument deduction/substitution failed:
main.cpp:5:2: note: candidate expects 3 arguments, 1 provided

第二阶段查找不应该开始并找到下面声明的重载吗?

最佳答案

void print(int);void print(float);应该在之前声明。
print(MyClass) 可以在 ADL 之后声明。

关于c++ - 尝试从可变函数模板调用基本情况重载的编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47894519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com