ERROR: Cannot use parentheses when declaring variable with deduced class template specialization type
ERROR: Cannot use parentheses when declaring variable with deduced class template specialization type
下午好!有人可以解释为什么在使用只传递一个向量的函数时会发生错误吗?
嗯,也就是说,您可以毫无痛苦地传输常量:3、“asdf”2.3 等,但命名变量则不然。但出于某种原因,杂交是可能的。怎么突然就可以了?
#include <iostream>
#include <vector>
template<typename... Args>
struct func
{
func(const Args&... args)
{
std::cout << "ok" << std::endl;
}
};
template <typename... Args>
func(Args...) -> func<Args...>;
int main()
{
const std::vector<int> v { 1, 2, 3 };
func(v); // error is here
func(v, 3); // no error
func("asdf"); // no error
}
错误:使用推导的 class 模板特化类型声明变量时不能使用括号
clang 的错误消息非常具体——g++ 和 vc++ 只抱怨 v
的声明冲突——但请注意它说“declaring一个变量。
由于 func
是一种类型,您可以在变量声明中将标识符括在括号中,并且由于“如果它可以被解释为声明,它 是 声明”规则,
func(v);
等同于
func v;
正在声明类型为 func
的变量 v
。
这是相同情况的一个较短的例子:
#include <vector>
int main() {
int v = 0;
std::vector<int>(v);
}
下午好!有人可以解释为什么在使用只传递一个向量的函数时会发生错误吗?
嗯,也就是说,您可以毫无痛苦地传输常量:3、“asdf”2.3 等,但命名变量则不然。但出于某种原因,杂交是可能的。怎么突然就可以了?
#include <iostream>
#include <vector>
template<typename... Args>
struct func
{
func(const Args&... args)
{
std::cout << "ok" << std::endl;
}
};
template <typename... Args>
func(Args...) -> func<Args...>;
int main()
{
const std::vector<int> v { 1, 2, 3 };
func(v); // error is here
func(v, 3); // no error
func("asdf"); // no error
}
错误:使用推导的 class 模板特化类型声明变量时不能使用括号
clang 的错误消息非常具体——g++ 和 vc++ 只抱怨 v
的声明冲突——但请注意它说“declaring一个变量。
由于 func
是一种类型,您可以在变量声明中将标识符括在括号中,并且由于“如果它可以被解释为声明,它 是 声明”规则,
func(v);
等同于
func v;
正在声明类型为 func
的变量 v
。
这是相同情况的一个较短的例子:
#include <vector>
int main() {
int v = 0;
std::vector<int>(v);
}