C++ 为什么这个使用std::rotate的简单程序不能编译?

C++ 为什么这个使用std::rotate的简单程序不能编译?,c++,c++11,std,C++,C++11,Std,这不起作用: 这显然是不正确的行为,因为旋转的声明是: template<class ForwardIterator> ForwardIterator rotate(ForwardIterator first, ForwardIterator middle, ForwardIterator last); 模板 ForwardIterator旋转(ForwardIterator第一,ForwardIterator中间, 转发器(最后一个); 为什么这个简单的

这不起作用:

这显然是不正确的行为,因为旋转的声明是:

template<class ForwardIterator>
  ForwardIterator rotate(ForwardIterator first, ForwardIterator middle,
          ForwardIterator last);
模板
ForwardIterator旋转(ForwardIterator第一,ForwardIterator中间,
转发器(最后一个);

为什么这个简单的程序无法编译?

在C++11之前。因此,您可能使用的是非C++11兼容的实现。

这看起来像是
libstdc++
问题,我们可以通过同时使用
libstdc++
libc++
进行测试来看到这一点,我们可以看到它只有在使用
libstdc++
时才会失败

使用使快速测试变得非常简单,不会生成错误。而会生成以下错误:

错误:变量的类型“void”不完整

如果我们查看cppreference条目,我们可以看到C++11之前的版本确实返回了
void

template< class ForwardIt >
void rotate( ForwardIt first, ForwardIt n_first, ForwardIt last ) (until C++11)

template< class ForwardIt >
ForwardIt rotate( ForwardIt first, ForwardIt n_first, ForwardIt last ); (since C++11)

另外,可能值得注意的是,该代码没有任何问题。

在C++11之前,
rotate
没有返回任何内容。显然,您的标准库实现并不是完全最新的。它是libstdc++(“rotate返回void”)。
template<class ForwardIterator>
  ForwardIterator rotate(ForwardIterator first, ForwardIterator middle,
          ForwardIterator last);
template< class ForwardIt >
void rotate( ForwardIt first, ForwardIt n_first, ForwardIt last ) (until C++11)

template< class ForwardIt >
ForwardIt rotate( ForwardIt first, ForwardIt n_first, ForwardIt last ); (since C++11)
25.3  |   Mutating sequence operations  | Partial rotate  | returns void.