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.