Boost logo

Boost Users :

Subject: Re: [Boost-users] [Range] Extending the library for a base class and all its derived - enable_if
From: Nathan Ridge (zeratul976_at_[hidden])
Date: 2014-04-26 00:05:11


>>> Would something like >>> >>> template <typename C> >>> struct range_iterator<typename enable_if<is_base_of<Base, C>, >>> C>::type> { ... }; >>> >>> work? >> This does not compile. >> > > Well, it should be > > template <typename C> > struct range_iterator<typename enable_if<is_base_of<Base, C>::value, C>::type> { ... }; > > > but an simpler example I tried also does not compile, complaining that > template parameter C is not used (though it clearly is). I wonder if > it's a bug in the error message (and the code is disallowed) or a real > compiler bug. The code is disallowed. In order to select the partial specialization for some argument type 'A', the compiler would have to compare 'A' and 'typename enable_if<is_base_of<Base, C>::value, C>::type' and deduce 'C'. It cannot do this (in standardese this is called a "non-deduced context"). Regards, Nate


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net