Package: lilypond
Version: 2.4.5-2
Severity: serious
Tags: patch

lilypond fails to build because some explicit template specializations
are not preceded by "template <>" (I have no idea what this clause
means):

> rm -f ./out/interval.dep; DEPENDENCIES_OUTPUT="./out/interval.dep 
> ./out/interval.o" g++ -c   -DHAVE_CONFIG_H  -DNDEBUG -DSTRING_UTILS_INLINED 
> -Iinclude -I./out -I../flower/include -I../flower/./out -O2 
> -finline-functions -g -pipe   -DNDEBUG -I/usr/include/python2.3       -O2 
> -finline-functions -g -pipe   -DNDEBUG -I/usr/include/python2.3   -W -Wall 
> -Wconversion  -o out/interval.o interval.cc
> include/real.hh: In function 'T max(T, T)':
> include/real.hh:33: warning: minimum/maximum operators are deprecated
> include/real.hh: In function 'T min(T, T)':
> include/real.hh:44: warning: minimum/maximum operators are deprecated
> include/interval.hh: In member function 'void Interval_t<T>::add_point(T)':
> include/interval.hh:55: warning: minimum/maximum operators are deprecated
> include/interval.hh:56: warning: minimum/maximum operators are deprecated
> include/interval.hh: At global scope:
> include/interval.hh:145: warning: minimum/maximum operators are deprecated
> include/interval.hh:145: warning: minimum/maximum operators are deprecated
> include/interval.hh:145: warning: minimum/maximum operators are deprecated
> include/interval.hh:145: warning: minimum/maximum operators are deprecated
> include/string-data.icc: In member function 'void String_data::remax(int)':
> include/string-data.icc:93: warning: minimum/maximum operators are deprecated
> include/string.hh: At global scope:
> include/string.hh:189: warning: minimum/maximum operators are deprecated
> include/string.hh:189: warning: minimum/maximum operators are deprecated
> include/string.hh:189: warning: minimum/maximum operators are deprecated
> include/string.hh:189: warning: minimum/maximum operators are deprecated
> include/interval.tcc: In member function 'void 
> Interval_t<T>::unite(Interval_t<T>)':
> include/interval.tcc:93: warning: minimum/maximum operators are deprecated
> include/interval.tcc:94: warning: minimum/maximum operators are deprecated
> include/interval.tcc: In member function 'void 
> Interval_t<T>::intersect(Interval_t<T>)':
> include/interval.tcc:102: warning: minimum/maximum operators are deprecated
> include/interval.tcc:103: warning: minimum/maximum operators are deprecated
> interval.cc: At global scope:
> interval.cc:15: error: explicit specialization of 'Real 
> Interval_t<Real>::infinity()' must be introduced by 'template <>'
> interval.cc:15: error: template-id 'infinity<>' for 'Real 
> Interval_t<Real>::infinity()' does not match any template declaration
> interval.cc:15: error: invalid function declaration
> interval.cc:21: error: explicit specialization of 'String 
> Interval_t<Real>::T_to_string(Real)' must be introduced by 'template <>'
> interval.cc:21: error: template-id 'T_to_string<>' for 'String 
> Interval_t<Real>::T_to_string(Real)' does not match any template declaration
> interval.cc:21: error: invalid function declaration
> interval.cc:28: error: explicit specialization of 'int 
> Interval_t<int>::infinity()' must be introduced by 'template <>'
> interval.cc:28: error: template-id 'infinity<>' for 'int 
> Interval_t<int>::infinity()' does not match any template declaration
> interval.cc:28: error: invalid function declaration
> interval.cc:34: error: explicit specialization of 'String 
> Interval_t<int>::T_to_string(int)' must be introduced by 'template <>'
> interval.cc:34: error: template-id 'T_to_string<>' for 'String 
> Interval_t<int>::T_to_string(int)' does not match any template declaration
> interval.cc:34: error: invalid function declaration

The attached patch, extracted from upstream, fixes these problems by
adding "template <>" before the explicit template specializations.

-- 
Matt
only in patch2:
unchanged:
--- lilypond-2.4.5.orig/flower/interval.cc
+++ lilypond-2.4.5/flower/interval.cc
@@ -11,12 +11,14 @@
 #include "real.hh"
 #include "interval.tcc"
 
+template <>
 Real
 Interval_t<Real>::infinity () 
 {
   return HUGE_VAL;
 }
 
+template <>
 String
 Interval_t<Real>::T_to_string (Real r)
 {
@@ -24,12 +26,14 @@
 }
 
 
+template <>
 int
 Interval_t<int>::infinity () 
 {
   return INT_MAX;
 }
 
+template <>
 String
 Interval_t<int>::T_to_string (int i)
 {
only in patch2:
unchanged:
--- lilypond-2.4.5.orig/lily/template5.cc
+++ lilypond-2.4.5/lily/template5.cc
@@ -13,6 +13,7 @@
 #include "interval.tcc"
 #include "compare.hh"
 
+template <>
 Rational
 Interval_t<Rational>::infinity ()
 {
@@ -21,6 +22,7 @@
   return infty;
 }
 
+template <>
 String
 Interval_t<Rational>::T_to_string (Rational a)
 {

Attachment: signature.asc
Description: Digital signature

Reply via email to