gpt4 book ai didi

c++ - 传递可变参数模板参数时出现 Visual Studio 错误

转载 作者:搜寻专家 更新时间:2023-10-31 02:15:31 24 4
gpt4 key购买 nike

<分区>

我有一个带有可变数量模板参数的模板函数,这些模板参数“中继”到 std::function 参数:

template<typename... Args>
void test1(const std::function<void(Args...)> &function)
{}

static void t(float) {}

int main(int argc,char *argv[])
{
test1<float>(nullptr);
test1<float>(&t);
test1<float>([](float f) -> void {

});
return EXIT_SUCCESS;
}

此编译和运行正常,但 visual studio 将 main 中的 all test1 调用用红色下划线,并显示以下错误消息:

template<class... Args> void test1(const std::function<void(Args...)> &function)

no instance of function template "test1" matches the argument list
argument types are: (lambda []void(float f)->void)

另一方面,这不会显示为错误:

template<typename... Args>
void test2(Args... a)
{}
int main(int argc,char *argv[])
{
test2<float>(1.f);
return EXIT_SUCCESS;
}

第一种情况是我做错了什么还是误报?这只是 visual studio 本身的一个错误,编译器甚至不会抛出任何警告。

//编辑:

我刚刚在 Linux 上用 g++-5 做了一些测试,它根本不让我编译代码:

root@******:/var/projects# g++-5 -std=c++1y test.cpp
test.cpp: In function ‘int main(int, char**)’:
test.cpp:12:22: error: no matching function for call to ‘test1(std::nullptr_t)’
test1<float>(nullptr);
^
test.cpp:5:7: note: candidate: template<class ... Args> void test1(const std::function<void(Args ...)>&)
void test1(const std::function<void(Args...)> &function)
^
test.cpp:5:7: note: template argument deduction/substitution failed:
test.cpp:12:22: note: mismatched types ‘const std::function<void(Args ...)>’ and ‘std::nullptr_t’
test1<float>(nullptr);
^
test.cpp:13:17: error: no matching function for call to ‘test1(void (*)(float))’
test1<float>(&t);
^
test.cpp:5:7: note: candidate: template<class ... Args> void test1(const std::function<void(Args ...)>&)
void test1(const std::function<void(Args...)> &function)
^
test.cpp:5:7: note: template argument deduction/substitution failed:
test.cpp:13:17: note: mismatched types ‘const std::function<void(Args ...)>’ and ‘void (*)(float)’
test1<float>(&t);
^
test.cpp:16:3: error: no matching function for call to ‘test1(main(int, char**)::<lambda(float)>)’
});
^
test.cpp:5:7: note: candidate: template<class ... Args> void test1(const std::function<void(Args ...)>&)
void test1(const std::function<void(Args...)> &function)
^
test.cpp:5:7: note: template argument deduction/substitution failed:
test.cpp:16:3: note: ‘main(int, char**)::<lambda(float)>’ is not derived from ‘const std::function<void(Args ...)>’
});
^

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