2

コンパイル エラーが発生するのはなぜno matching function for call to `f( __gnu_cxx::__normal_iterator > >)'ですか?

#include <vector>

template<typename T>
void f(const typename std::vector<T>::iterator &) {}

void g() {
  std::vector<int> v;
  f<int>(v.end());  // Compiles.
  f(v.end());  // Doesn't compile, gcc 4.3 can't find any match.
}

最終的には、ベクトル反復子のみを受け取り、それ以外の場合は (意味のあるエラーで) コンパイルに失敗する関数を書きたいと考えています。他のタイプでもコンパイルされるため、これtemplate<typename T>void f(const T&) {}は良い解決策ではありません。

4

2 に答える 2