読者です 読者をやめる 読者になる 読者になる

pair<T, bool>でのエラー処理

C++

Boost.MultiIndexのOrdered indicesにこんなのがあったので

namespace boost {
namespace multi_index {
namespace detail {

  template<implementation defined: dependent on types Value, Allocator,
           TagList, KeyFromValue, Compare>
  class name is implementation defined
  {
  public:
    ...

    std::pair<iterator,bool> insert(const value_type& x);
    iterator insert(iterator position,const value_type& x);
    template<typename InputIterator>
    void insert(InputIterator first,InputIterator last);

    ...
  };

}}}


pair形式でのエラー処理って使われてるんだ、と思ったら標準の連想コンテナでも使われてた。

namespace std {
  template <class Key, class T, class Compare = less<Key>,
            class Allocator = allocator<pair<const Key, T> > >
  class map {
  public:
    // modifiers:
    template <class... Args> pair<iterator, bool> emplace(Args&&... args);
    template <class... Args> iterator emplace_hint(const_iterator position, Args&&... args);
    pair<iterator, bool> insert(const value_type& x);
    template <class P> pair<iterator, bool> insert(P&& x);
    iterator insert(const_iterator position, const value_type& x);
    template <class P>
    iterator insert(const_iterator position, P&&);
    template <class InputIterator>
      void insert(InputIterator first, InputIterator last);
    void insert(initializer_list<value_type>);
  };
}
}
namespace std {
  template <class Key, class Compare = less<Key>,
            class Allocator = allocator<Key> >
  class set {
  public:
    ...

    // modifiers:
    template <class... Args> pair<iterator, bool> emplace(Args&&... args);
    template <class... Args> iterator emplace_hint(const_iterator position, Args&&... args);
    pair<iterator,bool> insert(const value_type& x);
    pair<iterator,bool> insert(value_type&& x);
    iterator insert(const_iterator position, const value_type& x);
    iterator insert(const_iterator position, value_type&& x);
    template <class InputIterator>
      void insert(InputIterator first, InputIterator last);
    void insert(initializer_list<value_type>);

    ...
  };
}