Clang vs gcc std :: crbegin with boost :: iterator_range

时间:2016-08-10 16:04:02

标签: c++ gcc boost clang c++14

使用libc ++的Clang 3.8.1编译以下程序:

componentDidMount() {
    UCRef.on('value', snapshot => {
      this.setState({usercount: snapshot.val()});
    });
  }

但是使用libstdc ++的gcc 6.1.0却没有。第一行gcc错误是:

UCRef.on('value', func)

谁是对的?

注意:提升版本1.61

1 个答案:

答案 0 :(得分:11)

它是bug in libc++; rbegin正在委派template <class _Cp> inline _LIBCPP_INLINE_VISIBILITY auto crbegin(const _Cp& __c) -> decltype(rbegin(__c)) { return rbegin(__c); // ^-- unqualified, allows ADL } ,但通过将其称为不合格,它会选择boost::rbegindocumentation):

crbegin

这与 [iterator.range] 相反,后者表示std::rbegin应仅委托给template <class C> constexpr auto crbegin(const C& c) -> decltype(std::rbegin(c));

  

std::rbegin(c)

     

14 - 返回: cbegin

Libc ++的cendcrend和{{1}}的实现具有相同的错误。