lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: compiling lilypond fails


From: David Kastrup
Subject: Re: compiling lilypond fails
Date: Fri, 24 Jun 2016 15:13:06 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1.50 (gnu/linux)

Knut Petersen <address@hidden> writes:

> os / compiler
> ===========
>
> os version: linux, openSUSE 13.2 (Harlequin) (x86_64)
> gcc --version: (SUSE Linux) 4.8.3 20140627 [gcc-4_8-branch revision 212064]

Pretty old as well.

> git bisect log
> =================
> git bisect start
> # good: [f4e12f1b0cb5dfb32f193f87e7ca28c406b87771] Issue 2232: fix MIDI 
> output of abutting (de)crescendi
> git bisect good f4e12f1b0cb5dfb32f193f87e7ca28c406b87771
> # bad: [a975d6f176453d35367e3fa4808c7061d326a9e7] Issue 4898: Set 
> rhythmic-location early in paper-column-engraver
> git bisect bad a975d6f176453d35367e3fa4808c7061d326a9e7
> # good: [f9b2cfebb944a0ea7d7c35a583233c51039486aa] PO: update template.
> git bisect good f9b2cfebb944a0ea7d7c35a583233c51039486aa
> # bad: [f7013d65b51f1372dc31973b78bbe04f505ea569] Issue 4899/1: Let 
> method_finder also find listeners
> git bisect bad f7013d65b51f1372dc31973b78bbe04f505ea569
> # good: [f869d8f6ebe878618588036e17971166721de9e0] Release: bump Welcome 
> versions.
> git bisect good f869d8f6ebe878618588036e17971166721de9e0
> # good: [5dbaaca80b06fda4b0a3b9cdc67760a2735dbee1] Merge remote branch 
> 'origin/release/unstable' into HEAD
> git bisect good 5dbaaca80b06fda4b0a3b9cdc67760a2735dbee1
> # good: [ec6b4cc313dd6a1aa4070080076da54b7f1c0c71] Release: bump VERSION.
> git bisect good ec6b4cc313dd6a1aa4070080076da54b7f1c0c71
> # first bad commit: [f7013d65b51f1372dc31973b78bbe04f505ea569] Issue 4899/1: 
> Let method_finder also find listeners

Ok, this is sort of a nuisance because I still have pending stuff in
that exact area (starting with issue 4903) and the same engravers.

At any rate, this implies that TRANSLATOR_INHERIT fails doing its job
when it has to inherit overloaded template functions with a single
"using" instruction.  I propose the following patch (to current
master).  Does it change something for you?

>From fa45edd4db3d49817425fa7833559f20697c3c74 Mon Sep 17 00:00:00 2001
From: David Kastrup <address@hidden>
Date: Fri, 24 Jun 2016 15:10:44 +0200
Subject: [PATCH] Split overloaded `method_finder' in two

Some older g++ compilers seem unhappy about the mixture of `using'
instructions and overloading in connection with templates, so the
overloaded way of calling `method_finder' is split into `method_finder'
and `listen_finder'.
---
 lily/include/translator.hh  | 8 +++++++-
 lily/include/translator.icc | 2 +-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/lily/include/translator.hh b/lily/include/translator.hh
index cd05091..3a13f8a 100644
--- a/lily/include/translator.hh
+++ b/lily/include/translator.hh
@@ -39,6 +39,7 @@
 
 #define TRANSLATOR_INHERIT(BASE)                                        \
   using BASE::method_finder;                                            \
+  using BASE::listen_finder;                                            \
   using BASE::ack_finder;
 
 #define DECLARE_TRANSLATOR_CALLBACKS(NAME)                              \
@@ -48,7 +49,7 @@
     return Callback0_wrapper::make_smob<NAME, mf> ();                   \
   }                                                                     \
   template <void (NAME::*mf)(Stream_event *)>                           \
-  static SCM method_finder ()                                           \
+  static SCM listen_finder ()                                           \
   {                                                                     \
     return Callback_wrapper::make_smob<trampoline<NAME, mf> > ();       \
   }                                                                     \
@@ -165,6 +166,11 @@ protected:                      // should be private.
   static SCM
   method_finder () { return SCM_UNDEFINED; }
 
+  // Overriden elsewhere but needed for TRANSLATOR_INHERIT
+  template <void (Translator::*)(Stream_event *)>
+  static SCM
+  listen_finder () { return SCM_UNDEFINED; }
+
   // Overriden in Engraver.  Don't instantiate.
   template <class T, void (T::*)(Grob_info)>
   static SCM ack_trampoline (SCM, SCM, SCM);
diff --git a/lily/include/translator.icc b/lily/include/translator.icc
index 3d038b6..cd9fa58 100644
--- a/lily/include/translator.icc
+++ b/lily/include/translator.icc
@@ -112,7 +112,7 @@ void add_acknowledger (SCM ptr,
 #define ADD_LISTENER(cl, m)                                             \
   listener_list_ = scm_acons                                            \
     (event_class_symbol (#m),                                           \
-     method_finder<&cl::listen_ ## m> (),                               \
+     listen_finder<&cl::listen_ ## m> (),                               \
      listener_list_)
 
 #endif /* TRANSLATOR_ICC */
-- 
2.7.4


-- 
David Kastrup

reply via email to

[Prev in Thread] Current Thread [Next in Thread]