http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56838



Jason Merrill <jason at gcc dot gnu.org> changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

                 CC|                            |jason at gcc dot gnu.org



--- Comment #1 from Jason Merrill <jason at gcc dot gnu.org> 2013-04-04 
13:46:04 UTC ---

GCC 4.8.0 also accepts this testcase.



The problem on the trunk is that G++ has started instantiating return types in

order to cause a substitution failure if the return type is an abstract class.



In this case, we've deduced template arguments for boost::bind(F, A1, A2) and

are substituting them in to produce a candidate; we haven't selected a

candidate yet.



During the substitution, we instantiate boost::_bi::bind_t to determine whether

it is abstract, and this leads to the error you're seeing.



This is new behavior for G++, but it seems to be what the standard requires. 

But perhaps that's a defect.  It certainly seems to be causing headaches.

Reply via email to