1. error: dependent-name ` xxx' is parsed as a non-type, but instantiation yields a type

    错误原因:
    简言之,就是说你该用typename的地方没用typename,如以下代码
    解决方法:
    在使用时,xx前面添加typename
    解析:
    typedef typename std::vector::size_type size_type; 的作用
    为什么使用typename关键字
    那么问题来了,为什么要加上typename关键字?

    1. typedef std::vector<T>::size_type size_type;//why not?• 1

    实际上,模板类型在实例化之前,编译器并不知道vector<T>::size_type是什么东西,事实上一共有三种可能:

    静态数据成员 静态成员函数 嵌套类型

    那么此时typename的作用就在此时体现出来了——定义就不再模棱两可。
    语句的真是面目是:
    typedef创建了存在类型的别名,而typename告诉编译器std::vector<T>::size_type是一个类型而不是一个成员。