小编Ste*_*ope的帖子

使用gcc替换模板替换和演绎失败

我相信我发现了gcc的别名模板处理问题.实质上,当通过引用引用类型时,gcc似乎无法正确地将别名的template-id替换为别名模板实例化.

我能够将一个混乱的现实问题简化为C++ 11标准部分temp.alias(14.5.7/2)中提供的非规范示例的微小变化:

#include <vector>

using namespace std;

template <class T>
using Vec = vector<T, allocator<T>>;

template <template <class> class TT>
void f1(TT<int> v);

template <template <class> class TT>
void f2(TT<int>& v);

template <template <class, class> class TT>
void g1(TT<int, allocator<int>> v);

template <template <class, class> class TT>
void g2(TT<int, allocator<int>>& v);

void foo()
{
   Vec<int> v;

   f1(v);    // gcc and clang both correctly yield no matching function error
   g1(v);

   f2(v);    // clang yields a no matching function error
   g2(v); …
Run Code Online (Sandbox Code Playgroud)

c++ gcc templates language-lawyer c++11

13
推荐指数
1
解决办法
834
查看次数

标签 统计

c++ ×1

c++11 ×1

gcc ×1

language-lawyer ×1

templates ×1