2012-07-06 71 views
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

+1

这真的是完整的错误信息? – 2012-07-06 15:07:25

+0

这是错误消息的一部分,说明发生错误的位置。它会被跟随或之前的错误描述 - 你能发布完整的消息吗? – 2012-07-06 15:09:21

+1

编译精美VC2010,在这里http://ideone.com/yGh30 – hmjd 2012-07-06 15:09:57

回答

2

如果我构建与启用C++ 11的支持,然后再编译。 Here is a demonstation

在C++ 11之前,auto有不同的含义,所以auto i = ...无效 - 它声明了一个没有类型的变量。

我想你使用的是GCC;根据版本的不同,您需要指定-std=c++0x-std=c++11作为命令行选项。

+0

已经启用了C++ 11 – user1233963 2012-07-06 15:15:04

+1

好的,在这种情况下,我们需要知道编译器的版本,这将有助于获得一个完整的可编译示例。您的代码适用于我:http://ideone.com/e4Qjh – 2012-07-06 15:16:25