]> git.donarmstrong.com Git - lilypond.git/commitdiff
Even more typecasting of member function pointers in smobs.tcc
authorDavid Kastrup <dak@gnu.org>
Tue, 14 Oct 2014 11:10:55 +0000 (13:10 +0200)
committerDavid Kastrup <dak@gnu.org>
Tue, 14 Oct 2014 11:10:55 +0000 (13:10 +0200)
This is yet-another-bugfix in order to get a rather inconspicuous member
function pointer comparison accepted by old GCC versions.

lily/include/smobs.tcc

index 7b5179256709db8570a1137109a6b1f9f14bfa4b..3a8e8c4f23b200cb9ad88bff11ff679e1ec33332 100644 (file)
@@ -128,9 +128,12 @@ void Smob_base<Super>::init ()
 
   if (&Super::free_smob != &Smob_base<Super>::free_smob)
     scm_set_smob_free (smob_tag_, Super::free_smob);
-  // Old GCC versions refuse comparing pointers-to-member-function of
-  // covariant types, so we recast here.
-  if (&Super::mark_smob !=
+  // Old GCC versions get their type lattice for pointers-to-members
+  // tangled up to a degree where we need to typecast _both_ covariant
+  // types in order to be able to compare them.  The other comparisons
+  // are for static member functions and thus are ordinary function
+  // pointers which work without those contortions.
+  if (static_cast<SCM (Super::*)()>(&Super::mark_smob) !=
       static_cast<SCM (Super::*)()>(&Smob_base<Super>::mark_smob))
     scm_set_smob_mark (smob_tag_, Super::mark_trampoline);
   scm_set_smob_print (smob_tag_, Super::print_trampoline);