|
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