Skip to content
Snippets Groups Projects
Forked from agnumpde / dune-tectonic
388 commits behind the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
enum_parser.cc 573 B
// Copyright Carsten Graeser 2012

#include <dune/common/exceptions.hh>
#include <dune/common/typetraits.hh>

template <class EnumType> struct StringToEnum : public Dune::NotImplemented {};

template <class EnumType>
typename Dune::enable_if<
    !Dune::IsBaseOf<Dune::NotImplemented, StringToEnum<EnumType>>::value,
    std::istream &>::type
operator>>(std::istream &lhs, EnumType &e) {
  std::string s;
  lhs >> s;

  try {
    e = StringToEnum<EnumType>::convert(s);
  }
  catch (typename Dune::Exception) {
    lhs.setstate(std::ios_base::failbit);
  }
  return lhs;
}