Re: Why the following SFINAE test does not work?
On 13.11.2010 20:03, Elias Salom?o Helou Neto wrote:
{ Attributions added for quotes; line breaks fixed; "..." ellipses removed from
URL; URL tested; short URL added. Elias, and others, please take some care with
the *form* of your contentwise very good articles -- so that they communicate
even better. TIA., -mod/aps }
* Daniel Kr?gler, on 13.11.2010 04:00:
* Am 11.11.2010 18:30, schrieb Andy Venikov:
This should be well-formed, and the OP's example should be so as well.
This produces an error that says that the compiler couldn't chose the
right apply among the overloads.
IMO this is a compiler-defect.
Could you please indicate the relevant standard sections? I am
planning to file a bug report.
14.8.1 + 14.8.2. I don't see anything that conflicts with the required
behaviour. All template arguments are explicitly provided and the corresponding
type constraints are satisfied. I don't see any invalid construct.
Further evidence that this is a compiler-bug is the fact, that if you
move all of
typedef char yes[1];
typedef char no[2];
template< class U, U u >
struct coerce {};
template< class U, unsigned n >
static yes& test( U*, coerce< void (U::*) ( const double& ) ,
&U::template apply< n > >* = 0 );
template< class U, unsigned n >
static no& test( ... );
in a non-template class X and replace the test
test<T, 0>(0)
within has_apply by
X::test<T, 0>(0)
the example works as expected.
HTH & Greetings from Bremen,
Daniel Kr?gler
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]