【发布时间】:2020-03-10 06:38:07
【问题描述】:
我正在尝试元编程。当我试图将variadic types 与std::tuple 连接时,我遇到了一个问题。
#include <tuple>
template<typename... Args , typename... TupleArgs>
void f( Args&&... , const std::tuple<TupleArgs...>& )
{ }
template<typename... Args , typename... TupleArgs>
void f2( const std::tuple<TupleArgs...>& , Args&&... )
{ }
int main(){
auto t = std::make_tuple( 1 , 2 , 2.0 , 3.0f );
// f ( 1 , 2 , t ); // deduction/substition failed
f2( t , 1 , 2 ); // Ok, no problem
}
我凭直觉希望这两个函数都能顺利编译,但编译器似乎对此有所抱怨。
有人可以解释为什么f 给出扣除/替换错误但f2 没有?
是否有解决方法(我确定有)?
编译器:x86-x64 GCC 9.2 带有 -std=c++17 选项
【问题讨论】:
-
如果您还提及您正在使用的编译器会有所帮助。
-
@TanveerBadar 它实际上存在于链接中,但我正在添加
标签: c++ variadic-templates template-argument-deduction