实例化模板功能时的编译警告

时间:2020-07-19 19:48:22

标签: c++

有人知道为什么要为此代码生成编译说明吗?在typename T::value_type e中编译时发生错误。我检查过,value_type存在于向量标题typedef _Tp value_type;中,谢谢

#include <vector>
using namespace std;

template <class T>
void f(T& c)
{
    typename T::value_type e = c[0];
}

int main(int argc, char *argv[])
{
    vector<int> v = {0, 1};
    f(v);
    return 0;
}

编译:

clang++ -std=c++11 -pedantic -Wall test181.cc && ./a.out
test181.cc:7:28: warning: unused variable 'e' [-Wunused-variable]
    typename T::value_type e = c[0];
                           ^
test181.cc:13:5: note: in instantiation of function template specialization
      'f<std::vector<int, std::allocator<int> > >' requested here
    f(v);
    ^
1 warning generated.

2 个答案:

答案 0 :(得分:0)

这让您知道您已经写入了一个永远不会被读取的变量,这通常是代码的味道。如评论中所述,这仅是警告,不是错误。

答案 1 :(得分:0)

该注释实际上与未使用变量的警告有关。使用该变量摆脱警告。