1 // { dg-do assemble  }
2 // GROUPS passed conversions
3 #include <iostream>
4 
5 class Thing
6 {
7 public:
8       typedef enum { GOOD_THING, BAD_THING, } ThingType ; // { dg-error "" "comma" { target { ! c++11 } } }
Thing(ThingType type)9 	Thing (ThingType type) : thingType (type) { }
~Thing()10 	~Thing () { }
11 private:
12 	ThingType thingType ;
13 } ;
14 
15 class Group
16 {
17 public:
18       typedef enum { THIS_GROUP, THAT_GROUP, } GroupType ; // { dg-error "" "comma" { target { ! c++11 } } }
Group(GroupType type)19 	Group (GroupType type) : groupType (type), groupCount (0) { }
~Group()20 	~Group () { }
append(Thing * const & entry)21 	void append (Thing* const &entry) { groupCount ++ ; }
GroupType()22 	operator GroupType () const { return groupType ; }
23 	operator int () const { return groupCount ; } // remove this and problem gone
24 
25 private:
26 	int groupCount ;
27 	GroupType groupType ;
28 } ;
29 
30 inline Group& operator += (Group& g, Thing* const t)
31 {
32 	g.append (t) ;
33 	return g ; // complaint is here
34 }
35 
36 int
main(int argc,char ** argv)37 main (int argc, char** argv)
38 {
39 	Group g (Group::THIS_GROUP) ;
40 
41 	g += new Thing (Thing::GOOD_THING) ;
42 	std::cout << "Group type is " << (Group::GroupType) g << std::endl ;
43 	return 0 ;
44 }
45