view gcc/testsuite/g++.dg/template/sfinae26.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
line wrap: on
line source

// Origin: PR c++/46170
// { dg-do compile }

namespace util {
  struct option_value {
  };
  template <class T> struct options_map_impl {
    typedef T options_struct_type;
    typedef bool (*opt_func)(const option_value&, options_struct_type&);
    template <class V, V K>  static  bool  set_member_constant(const option_value&,
							       options_struct_type&, V options_struct_type::*);
    template <class V, V options_struct_type::*mem, V K>  static  bool 
    set_member_constant(const option_value& opt, options_struct_type& t) {
      return set_member_constant<V,K>(opt, t, mem);
    }
  };
}
struct cflat_options {
  bool show_precharges;
};
typedef util::options_map_impl<cflat_options> options_map_impl_type;
class register_options_modifier {
  typedef options_map_impl_type::opt_func modifier_type;
public:  register_options_modifier();
  register_options_modifier(const char* Mode,    const modifier_type COM,   
			    const char* h);
};
static const register_options_modifier
cflat_opt_mod_show_precharges("precharges",
			      &options_map_impl_type::set_member_constant<bool,
									  &cflat_options::show_precharges, true>, "show precharge expressions"),
  cflat_opt_mod_no_show_precharges("no-" "precharges",
				   &options_map_impl_type::set_member_constant<bool,
									       &cflat_options::show_precharges, false>, "hide precharge expressions");