0

次のテンプレート関数があります。

template <std::size_t first, std::size_t last, typename T>
bool in_range(T& in)
{
    for(auto i = in.begin(); i!=in.end(); ++i)
        if(*i<first || *i>last)
            return false;
    return true;
}

しかし、私がそれをそのまま使用しようとすると:

std::vector<int> test;
test.push_back(1);
test.push_back(5);
test.push_back(6);

std::cout<<in_range<4,7>(test);

この奇妙なエラーが発生します:

main.cpp: In instantiation of 'bool in_range(T&) [with long long unsigned int first = 4ull; long long unsigned int last = 7ull; T = std::vector<int>]':
main.cpp:31:34:   required from here

私は何を間違っていますか?

編集: 完全なビルド ログ: http://pastebin.com/Cwemq2Hk

4

1 に答える 1

2

C++11 サポートを有効にしてビルドすると、コンパイルされます。ここにデモンストレーションがあります。

C++11 より前でautoは、別の意味を持っていたため、auto i = ...無効でした。型のない変数を宣言していました。

GCC を使用していると思います。バージョンによっては、-std=c++0xまたは-std=c++11をコマンドライン オプションとして指定する必要があります。

于 2012-07-06T15:14:03.780 に答える