C++:error: ‘__replace_first_arg2’ is not a class template

文章目录

代码

注意下面这个模板不是类模板,而是一个类型别名的模板。

  template<template<typename, typename...> class _Template, typename _Up,
           typename _Tp, typename... _Types>
    struct __replace_first_arg2<_Template<_Tp, _Types...>, _Up> 
                      、、、 由于尖括号的原因,编译器认为这里是在使用类模板__replace_first_arg2
    {
    
     using type = _Template<_Up, _Types...>; };

int main()
{
    
    
        cout<<"abc"<<endl;
}

解释

这个错误的含义就是说__replace_first_arg2 这个token不是一个类模板。但是代码里确将这个token作为一个类模板使用。从哪里看出来是在使用这个模板类内,就是通过这个token后面的<>尖括号来判断。

模板的定义类似于这样的,如果是类的模板
template < 模板参数> class token {*********};

使用这个模板类的方式:
token<模板参数> abc;

解决

将下面这一段放到前面,就算是定义这个类模板了。其实可以利用这些个libc++的库文件,很好的学习C++。真实无尽所用。
// Given Template<T, …> and U return Template<U, …>, otherwise invalid.
template<typename _Tp, typename _Up>
struct __replace_first_arg2
{ };

猜你喜欢

转载自blog.csdn.net/qq_36428903/article/details/125568439
今日推荐