7得票1回答
C++中关于模板中通用初始化的问题

我正在编写一个通用函数,代码如下。 template<class Iterator, class T> void foo(Iterator first, Iterator last) { T a; cout << a << endl; /...

22得票4回答
带有参数包展开的可变函数模板不在最后一个参数位置。

我想知道为什么以下代码无法编译: struct S { template <typename... T> S(T..., int); }; S c{0, 0}; 这段代码无法通过clang和GCC 4.8的编译。以下是clang的错误信息: test.c...

10得票3回答
函数模板专门化失败?

#include <iostream> template <class T> void foo(T) { std::cout << "foo(T)" << std::endl; } template <class T> ...

9得票2回答
在C++20中实现可变参数的最大函数。

尽管我们有std::max,但我想尝试一下是否可以创建一个接受可变参数并递归调用Max函数来找到最大元素的Max版本。 我在stackoverflow上看到了类似的帖子,但那些帖子都比较旧,并且大多数都在内部使用std::max。由于我遇到了特定的错误,并且使用了更新的编译器,所以这篇帖子不...

43得票2回答
模板默认参数丢失其引用类型。

考虑 #include <iostream> #include <type_traits> template <class T, class ARG_T = T&> T foo(ARG_T v){ return std::is_refer...

7得票3回答
具有显式模板参数列表的函数调用推断失败和[temp.arg.explicit]/3

[temp.arg.explicit]/3 C++17标准(最终草案)中提到了使用显式模板参数列表进行函数模板参数推导的情况: 在进行推导并失败的上下文中,如果指定了模板参数列表,并且该列表与任何默认模板参数一起可以唯一识别单个函数模板实例化,则该模板-id对于函数模板特化是一个左值。 ...

61得票2回答
为什么 `const T&` 不确定是常量?

template<typename T> void f(T a, const T& b) { ++a; // ok ++b; // also ok! } template<typename T> void g(T n) { f<T...

8得票2回答
为什么我们需要voidify函数模板在uninitialized_copy中?

我正在阅读关于 std::uninitialized_copy,并遇到了一个叫做 voidify 的东西: Effects: Equivalent to: for (; first != last; ++result, (void) ++first) //#1----vvvvvvv----...

28得票2回答
C++20中是否不再允许针对程序定义类型在std中进行函数模板的专门化?

引用自cppreference.com: 添加模板特化 只有当声明依赖于至少一个程序定义的类型,而且特化满足所有原始模板的要求时(除了禁止此类特化的情况),才允许向std命名空间添加任何标准库|类模板(自从C++20起)|的模板特化。 这是否意味着,从C++20开始,不再...

10得票1回答
Clang:模板推导失败 'double' vs '<double>'。 (注:这是一个提问标题,无需回答。)

考虑以下代码,它使用具有可变参数的函数:#include &lt;iostream&gt; // Typedef function type template&lt;typename... Output&gt; using Func = void(Output*...); // Funct...