Merge lp:~wolfgang-2/seq24/fix-c++11 into lp:seq24
- fix-c++11
- Merge into trunk
Proposed by
Wolfgang Illmeyer
Status: | Merged |
---|---|
Merge reported by: | Wolfgang Illmeyer |
Merged at revision: | not available |
Proposed branch: | lp:~wolfgang-2/seq24/fix-c++11 |
Merge into: | lp:seq24 |
Diff against target: |
672 lines (+606/-3) 5 files modified
ChangeLog (+4/-0) configure.ac (+2/-0) m4/ax_cxx_compile_stdcxx.m4 (+558/-0) m4/ax_cxx_compile_stdcxx_11.m4 (+39/-0) src/perfedit.cpp (+3/-3) |
To merge this branch: | bzr merge lp:~wolfgang-2/seq24/fix-c++11 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Sebastien Alaiwan | Approve | ||
Review via email: mp+283555@code.launchpad.net |
Commit message
recent versions of gtkmm require c++11; this change introduces c++11 compatibility
Description of the change
recent versions of gtkmm require c++11; this change introduces c++11 compatibility
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'ChangeLog' |
2 | --- ChangeLog 2012-02-25 15:11:48 +0000 |
3 | +++ ChangeLog 2016-01-21 23:56:07 +0000 |
4 | @@ -1,5 +1,9 @@ |
5 | +++ Release 0.9.3 (2012-02-??) +++ |
6 | |
7 | +2016-01-22 Wolfgang Illmeyer <wolfgang@illmeyer.com> |
8 | + * configure.ac, src/perfedit.cpp, m4/*: Make the build work with |
9 | + C++11, as required by recent versions of gtkmm |
10 | + |
11 | 2012-02-25 Guido Scholz <guido.scholz@bayernline.de> |
12 | * src/perform.*: Remove --file option from jack session |
13 | commandline, hint by Frank Kober |
14 | |
15 | === modified file 'configure.ac' |
16 | --- configure.ac 2014-04-08 19:02:52 +0000 |
17 | +++ configure.ac 2016-01-21 23:56:07 +0000 |
18 | @@ -3,6 +3,7 @@ |
19 | |
20 | AC_CONFIG_SRCDIR([src/event.cpp]) |
21 | AC_CONFIG_HEADER([src/config.h]) |
22 | +AC_CONFIG_MACRO_DIRS([m4]) |
23 | |
24 | AM_INIT_AUTOMAKE([dist-bzip2 subdir-objects]) |
25 | |
26 | @@ -14,6 +15,7 @@ |
27 | AC_PROG_CXX |
28 | AC_PROG_INSTALL |
29 | AC_PROG_LN_S |
30 | +AX_CXX_COMPILE_STDCXX_11(noext,mandatory) |
31 | |
32 | |
33 | dnl Do we have -Wl,--as-needed? |
34 | |
35 | === added directory 'm4' |
36 | === added file 'm4/ax_cxx_compile_stdcxx.m4' |
37 | --- m4/ax_cxx_compile_stdcxx.m4 1970-01-01 00:00:00 +0000 |
38 | +++ m4/ax_cxx_compile_stdcxx.m4 2016-01-21 23:56:07 +0000 |
39 | @@ -0,0 +1,558 @@ |
40 | +# =========================================================================== |
41 | +# http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html |
42 | +# =========================================================================== |
43 | +# |
44 | +# SYNOPSIS |
45 | +# |
46 | +# AX_CXX_COMPILE_STDCXX(VERSION, [ext|noext], [mandatory|optional]) |
47 | +# |
48 | +# DESCRIPTION |
49 | +# |
50 | +# Check for baseline language coverage in the compiler for the specified |
51 | +# version of the C++ standard. If necessary, add switches to CXXFLAGS to |
52 | +# enable support. VERSION may be '11' (for the C++11 standard) or '14' |
53 | +# (for the C++14 standard). |
54 | +# |
55 | +# The second argument, if specified, indicates whether you insist on an |
56 | +# extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g. |
57 | +# -std=c++11). If neither is specified, you get whatever works, with |
58 | +# preference for an extended mode. |
59 | +# |
60 | +# The third argument, if specified 'mandatory' or if left unspecified, |
61 | +# indicates that baseline support for the specified C++ standard is |
62 | +# required and that the macro should error out if no mode with that |
63 | +# support is found. If specified 'optional', then configuration proceeds |
64 | +# regardless, after defining HAVE_CXX${VERSION} if and only if a |
65 | +# supporting mode is found. |
66 | +# |
67 | +# LICENSE |
68 | +# |
69 | +# Copyright (c) 2008 Benjamin Kosnik <bkoz@redhat.com> |
70 | +# Copyright (c) 2012 Zack Weinberg <zackw@panix.com> |
71 | +# Copyright (c) 2013 Roy Stogner <roystgnr@ices.utexas.edu> |
72 | +# Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov <sokolov@google.com> |
73 | +# Copyright (c) 2015 Paul Norman <penorman@mac.com> |
74 | +# Copyright (c) 2015 Moritz Klammler <moritz@klammler.eu> |
75 | +# |
76 | +# Copying and distribution of this file, with or without modification, are |
77 | +# permitted in any medium without royalty provided the copyright notice |
78 | +# and this notice are preserved. This file is offered as-is, without any |
79 | +# warranty. |
80 | + |
81 | +#serial 1 |
82 | + |
83 | +dnl This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro |
84 | +dnl (serial version number 13). |
85 | + |
86 | +AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl |
87 | + m4_if([$1], [11], [], |
88 | + [$1], [14], [], |
89 | + [$1], [17], [m4_fatal([support for C++17 not yet implemented in AX_CXX_COMPILE_STDCXX])], |
90 | + [m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl |
91 | + m4_if([$2], [], [], |
92 | + [$2], [ext], [], |
93 | + [$2], [noext], [], |
94 | + [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX])])dnl |
95 | + m4_if([$3], [], [ax_cxx_compile_cxx$1_required=true], |
96 | + [$3], [mandatory], [ax_cxx_compile_cxx$1_required=true], |
97 | + [$3], [optional], [ax_cxx_compile_cxx$1_required=false], |
98 | + [m4_fatal([invalid third argument `$3' to AX_CXX_COMPILE_STDCXX])]) |
99 | + AC_LANG_PUSH([C++])dnl |
100 | + ac_success=no |
101 | + AC_CACHE_CHECK(whether $CXX supports C++$1 features by default, |
102 | + ax_cv_cxx_compile_cxx$1, |
103 | + [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], |
104 | + [ax_cv_cxx_compile_cxx$1=yes], |
105 | + [ax_cv_cxx_compile_cxx$1=no])]) |
106 | + if test x$ax_cv_cxx_compile_cxx$1 = xyes; then |
107 | + ac_success=yes |
108 | + fi |
109 | + |
110 | + m4_if([$2], [noext], [], [dnl |
111 | + if test x$ac_success = xno; then |
112 | + for switch in -std=gnu++$1 -std=gnu++0x; do |
113 | + cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch]) |
114 | + AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch, |
115 | + $cachevar, |
116 | + [ac_save_CXXFLAGS="$CXXFLAGS" |
117 | + CXXFLAGS="$CXXFLAGS $switch" |
118 | + AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], |
119 | + [eval $cachevar=yes], |
120 | + [eval $cachevar=no]) |
121 | + CXXFLAGS="$ac_save_CXXFLAGS"]) |
122 | + if eval test x\$$cachevar = xyes; then |
123 | + CXXFLAGS="$CXXFLAGS $switch" |
124 | + ac_success=yes |
125 | + break |
126 | + fi |
127 | + done |
128 | + fi]) |
129 | + |
130 | + m4_if([$2], [ext], [], [dnl |
131 | + if test x$ac_success = xno; then |
132 | + dnl HP's aCC needs +std=c++11 according to: |
133 | + dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf |
134 | + dnl Cray's crayCC needs "-h std=c++11" |
135 | + for switch in -std=c++$1 -std=c++0x +std=c++$1 "-h std=c++$1"; do |
136 | + cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch]) |
137 | + AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch, |
138 | + $cachevar, |
139 | + [ac_save_CXXFLAGS="$CXXFLAGS" |
140 | + CXXFLAGS="$CXXFLAGS $switch" |
141 | + AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], |
142 | + [eval $cachevar=yes], |
143 | + [eval $cachevar=no]) |
144 | + CXXFLAGS="$ac_save_CXXFLAGS"]) |
145 | + if eval test x\$$cachevar = xyes; then |
146 | + CXXFLAGS="$CXXFLAGS $switch" |
147 | + ac_success=yes |
148 | + break |
149 | + fi |
150 | + done |
151 | + fi]) |
152 | + AC_LANG_POP([C++]) |
153 | + if test x$ax_cxx_compile_cxx$1_required = xtrue; then |
154 | + if test x$ac_success = xno; then |
155 | + AC_MSG_ERROR([*** A compiler with support for C++$1 language features is required.]) |
156 | + fi |
157 | + else |
158 | + if test x$ac_success = xno; then |
159 | + HAVE_CXX$1=0 |
160 | + AC_MSG_NOTICE([No compiler with C++$1 support was found]) |
161 | + else |
162 | + HAVE_CXX$1=1 |
163 | + AC_DEFINE(HAVE_CXX$1,1, |
164 | + [define if the compiler supports basic C++$1 syntax]) |
165 | + fi |
166 | + |
167 | + AC_SUBST(HAVE_CXX$1) |
168 | + fi |
169 | +]) |
170 | + |
171 | + |
172 | +dnl Test body for checking C++11 support |
173 | + |
174 | +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_11], |
175 | + _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 |
176 | +) |
177 | + |
178 | + |
179 | +dnl Test body for checking C++14 support |
180 | + |
181 | +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14], |
182 | + _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 |
183 | + _AX_CXX_COMPILE_STDCXX_testbody_new_in_14 |
184 | +) |
185 | + |
186 | + |
187 | +dnl Tests for new features in C++11 |
188 | + |
189 | +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_11], [[ |
190 | + |
191 | +// If the compiler admits that it is not ready for C++11, why torture it? |
192 | +// Hopefully, this will speed up the test. |
193 | + |
194 | +#ifndef __cplusplus |
195 | + |
196 | +#error "This is not a C++ compiler" |
197 | + |
198 | +#elif __cplusplus < 201103L |
199 | + |
200 | +#error "This is not a C++11 compiler" |
201 | + |
202 | +#else |
203 | + |
204 | +namespace cxx11 |
205 | +{ |
206 | + |
207 | + namespace test_static_assert |
208 | + { |
209 | + |
210 | + template <typename T> |
211 | + struct check |
212 | + { |
213 | + static_assert(sizeof(int) <= sizeof(T), "not big enough"); |
214 | + }; |
215 | + |
216 | + } |
217 | + |
218 | + namespace test_final_override |
219 | + { |
220 | + |
221 | + struct Base |
222 | + { |
223 | + virtual void f() {} |
224 | + }; |
225 | + |
226 | + struct Derived : public Base |
227 | + { |
228 | + virtual void f() override {} |
229 | + }; |
230 | + |
231 | + } |
232 | + |
233 | + namespace test_double_right_angle_brackets |
234 | + { |
235 | + |
236 | + template < typename T > |
237 | + struct check {}; |
238 | + |
239 | + typedef check<void> single_type; |
240 | + typedef check<check<void>> double_type; |
241 | + typedef check<check<check<void>>> triple_type; |
242 | + typedef check<check<check<check<void>>>> quadruple_type; |
243 | + |
244 | + } |
245 | + |
246 | + namespace test_decltype |
247 | + { |
248 | + |
249 | + int |
250 | + f() |
251 | + { |
252 | + int a = 1; |
253 | + decltype(a) b = 2; |
254 | + return a + b; |
255 | + } |
256 | + |
257 | + } |
258 | + |
259 | + namespace test_type_deduction |
260 | + { |
261 | + |
262 | + template < typename T1, typename T2 > |
263 | + struct is_same |
264 | + { |
265 | + static const bool value = false; |
266 | + }; |
267 | + |
268 | + template < typename T > |
269 | + struct is_same<T, T> |
270 | + { |
271 | + static const bool value = true; |
272 | + }; |
273 | + |
274 | + template < typename T1, typename T2 > |
275 | + auto |
276 | + add(T1 a1, T2 a2) -> decltype(a1 + a2) |
277 | + { |
278 | + return a1 + a2; |
279 | + } |
280 | + |
281 | + int |
282 | + test(const int c, volatile int v) |
283 | + { |
284 | + static_assert(is_same<int, decltype(0)>::value == true, ""); |
285 | + static_assert(is_same<int, decltype(c)>::value == false, ""); |
286 | + static_assert(is_same<int, decltype(v)>::value == false, ""); |
287 | + auto ac = c; |
288 | + auto av = v; |
289 | + auto sumi = ac + av + 'x'; |
290 | + auto sumf = ac + av + 1.0; |
291 | + static_assert(is_same<int, decltype(ac)>::value == true, ""); |
292 | + static_assert(is_same<int, decltype(av)>::value == true, ""); |
293 | + static_assert(is_same<int, decltype(sumi)>::value == true, ""); |
294 | + static_assert(is_same<int, decltype(sumf)>::value == false, ""); |
295 | + static_assert(is_same<int, decltype(add(c, v))>::value == true, ""); |
296 | + return (sumf > 0.0) ? sumi : add(c, v); |
297 | + } |
298 | + |
299 | + } |
300 | + |
301 | + namespace test_noexcept |
302 | + { |
303 | + |
304 | + int f() { return 0; } |
305 | + int g() noexcept { return 0; } |
306 | + |
307 | + static_assert(noexcept(f()) == false, ""); |
308 | + static_assert(noexcept(g()) == true, ""); |
309 | + |
310 | + } |
311 | + |
312 | + namespace test_constexpr |
313 | + { |
314 | + |
315 | + template < typename CharT > |
316 | + unsigned long constexpr |
317 | + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept |
318 | + { |
319 | + return *s ? strlen_c_r(s + 1, acc + 1) : acc; |
320 | + } |
321 | + |
322 | + template < typename CharT > |
323 | + unsigned long constexpr |
324 | + strlen_c(const CharT *const s) noexcept |
325 | + { |
326 | + return strlen_c_r(s, 0UL); |
327 | + } |
328 | + |
329 | + static_assert(strlen_c("") == 0UL, ""); |
330 | + static_assert(strlen_c("1") == 1UL, ""); |
331 | + static_assert(strlen_c("example") == 7UL, ""); |
332 | + static_assert(strlen_c("another\0example") == 7UL, ""); |
333 | + |
334 | + } |
335 | + |
336 | + namespace test_rvalue_references |
337 | + { |
338 | + |
339 | + template < int N > |
340 | + struct answer |
341 | + { |
342 | + static constexpr int value = N; |
343 | + }; |
344 | + |
345 | + answer<1> f(int&) { return answer<1>(); } |
346 | + answer<2> f(const int&) { return answer<2>(); } |
347 | + answer<3> f(int&&) { return answer<3>(); } |
348 | + |
349 | + void |
350 | + test() |
351 | + { |
352 | + int i = 0; |
353 | + const int c = 0; |
354 | + static_assert(decltype(f(i))::value == 1, ""); |
355 | + static_assert(decltype(f(c))::value == 2, ""); |
356 | + static_assert(decltype(f(0))::value == 3, ""); |
357 | + } |
358 | + |
359 | + } |
360 | + |
361 | + namespace test_uniform_initialization |
362 | + { |
363 | + |
364 | + struct test |
365 | + { |
366 | + static const int zero {}; |
367 | + static const int one {1}; |
368 | + }; |
369 | + |
370 | + static_assert(test::zero == 0, ""); |
371 | + static_assert(test::one == 1, ""); |
372 | + |
373 | + } |
374 | + |
375 | + namespace test_lambdas |
376 | + { |
377 | + |
378 | + void |
379 | + test1() |
380 | + { |
381 | + auto lambda1 = [](){}; |
382 | + auto lambda2 = lambda1; |
383 | + lambda1(); |
384 | + lambda2(); |
385 | + } |
386 | + |
387 | + int |
388 | + test2() |
389 | + { |
390 | + auto a = [](int i, int j){ return i + j; }(1, 2); |
391 | + auto b = []() -> int { return '0'; }(); |
392 | + auto c = [=](){ return a + b; }(); |
393 | + auto d = [&](){ return c; }(); |
394 | + auto e = [a, &b](int x) mutable { |
395 | + const auto identity = [](int y){ return y; }; |
396 | + for (auto i = 0; i < a; ++i) |
397 | + a += b--; |
398 | + return x + identity(a + b); |
399 | + }(0); |
400 | + return a + b + c + d + e; |
401 | + } |
402 | + |
403 | + int |
404 | + test3() |
405 | + { |
406 | + const auto nullary = [](){ return 0; }; |
407 | + const auto unary = [](int x){ return x; }; |
408 | + using nullary_t = decltype(nullary); |
409 | + using unary_t = decltype(unary); |
410 | + const auto higher1st = [](nullary_t f){ return f(); }; |
411 | + const auto higher2nd = [unary](nullary_t f1){ |
412 | + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; |
413 | + }; |
414 | + return higher1st(nullary) + higher2nd(nullary)(unary); |
415 | + } |
416 | + |
417 | + } |
418 | + |
419 | + namespace test_variadic_templates |
420 | + { |
421 | + |
422 | + template <int...> |
423 | + struct sum; |
424 | + |
425 | + template <int N0, int... N1toN> |
426 | + struct sum<N0, N1toN...> |
427 | + { |
428 | + static constexpr auto value = N0 + sum<N1toN...>::value; |
429 | + }; |
430 | + |
431 | + template <> |
432 | + struct sum<> |
433 | + { |
434 | + static constexpr auto value = 0; |
435 | + }; |
436 | + |
437 | + static_assert(sum<>::value == 0, ""); |
438 | + static_assert(sum<1>::value == 1, ""); |
439 | + static_assert(sum<23>::value == 23, ""); |
440 | + static_assert(sum<1, 2>::value == 3, ""); |
441 | + static_assert(sum<5, 5, 11>::value == 21, ""); |
442 | + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); |
443 | + |
444 | + } |
445 | + |
446 | + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae |
447 | + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function |
448 | + // because of this. |
449 | + namespace test_template_alias_sfinae |
450 | + { |
451 | + |
452 | + struct foo {}; |
453 | + |
454 | + template<typename T> |
455 | + using member = typename T::member_type; |
456 | + |
457 | + template<typename T> |
458 | + void func(...) {} |
459 | + |
460 | + template<typename T> |
461 | + void func(member<T>*) {} |
462 | + |
463 | + void test(); |
464 | + |
465 | + void test() { func<foo>(0); } |
466 | + |
467 | + } |
468 | + |
469 | +} // namespace cxx11 |
470 | + |
471 | +#endif // __cplusplus >= 201103L |
472 | + |
473 | +]]) |
474 | + |
475 | + |
476 | +dnl Tests for new features in C++14 |
477 | + |
478 | +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_14], [[ |
479 | + |
480 | +// If the compiler admits that it is not ready for C++14, why torture it? |
481 | +// Hopefully, this will speed up the test. |
482 | + |
483 | +#ifndef __cplusplus |
484 | + |
485 | +#error "This is not a C++ compiler" |
486 | + |
487 | +#elif __cplusplus < 201402L |
488 | + |
489 | +#error "This is not a C++14 compiler" |
490 | + |
491 | +#else |
492 | + |
493 | +namespace cxx14 |
494 | +{ |
495 | + |
496 | + namespace test_polymorphic_lambdas |
497 | + { |
498 | + |
499 | + int |
500 | + test() |
501 | + { |
502 | + const auto lambda = [](auto&&... args){ |
503 | + const auto istiny = [](auto x){ |
504 | + return (sizeof(x) == 1UL) ? 1 : 0; |
505 | + }; |
506 | + const int aretiny[] = { istiny(args)... }; |
507 | + return aretiny[0]; |
508 | + }; |
509 | + return lambda(1, 1L, 1.0f, '1'); |
510 | + } |
511 | + |
512 | + } |
513 | + |
514 | + namespace test_binary_literals |
515 | + { |
516 | + |
517 | + constexpr auto ivii = 0b0000000000101010; |
518 | + static_assert(ivii == 42, "wrong value"); |
519 | + |
520 | + } |
521 | + |
522 | + namespace test_generalized_constexpr |
523 | + { |
524 | + |
525 | + template < typename CharT > |
526 | + constexpr unsigned long |
527 | + strlen_c(const CharT *const s) noexcept |
528 | + { |
529 | + auto length = 0UL; |
530 | + for (auto p = s; *p; ++p) |
531 | + ++length; |
532 | + return length; |
533 | + } |
534 | + |
535 | + static_assert(strlen_c("") == 0UL, ""); |
536 | + static_assert(strlen_c("x") == 1UL, ""); |
537 | + static_assert(strlen_c("test") == 4UL, ""); |
538 | + static_assert(strlen_c("another\0test") == 7UL, ""); |
539 | + |
540 | + } |
541 | + |
542 | + namespace test_lambda_init_capture |
543 | + { |
544 | + |
545 | + int |
546 | + test() |
547 | + { |
548 | + auto x = 0; |
549 | + const auto lambda1 = [a = x](int b){ return a + b; }; |
550 | + const auto lambda2 = [a = lambda1(x)](){ return a; }; |
551 | + return lambda2(); |
552 | + } |
553 | + |
554 | + } |
555 | + |
556 | + namespace test_digit_seperators |
557 | + { |
558 | + |
559 | + constexpr auto ten_million = 100'000'000; |
560 | + static_assert(ten_million == 100000000, ""); |
561 | + |
562 | + } |
563 | + |
564 | + namespace test_return_type_deduction |
565 | + { |
566 | + |
567 | + auto f(int& x) { return x; } |
568 | + decltype(auto) g(int& x) { return x; } |
569 | + |
570 | + template < typename T1, typename T2 > |
571 | + struct is_same |
572 | + { |
573 | + static constexpr auto value = false; |
574 | + }; |
575 | + |
576 | + template < typename T > |
577 | + struct is_same<T, T> |
578 | + { |
579 | + static constexpr auto value = true; |
580 | + }; |
581 | + |
582 | + int |
583 | + test() |
584 | + { |
585 | + auto x = 0; |
586 | + static_assert(is_same<int, decltype(f(x))>::value, ""); |
587 | + static_assert(is_same<int&, decltype(g(x))>::value, ""); |
588 | + return x; |
589 | + } |
590 | + |
591 | + } |
592 | + |
593 | +} // namespace cxx14 |
594 | + |
595 | +#endif // __cplusplus >= 201402L |
596 | + |
597 | +]]) |
598 | |
599 | === added file 'm4/ax_cxx_compile_stdcxx_11.m4' |
600 | --- m4/ax_cxx_compile_stdcxx_11.m4 1970-01-01 00:00:00 +0000 |
601 | +++ m4/ax_cxx_compile_stdcxx_11.m4 2016-01-21 23:56:07 +0000 |
602 | @@ -0,0 +1,39 @@ |
603 | +# ============================================================================ |
604 | +# http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_11.html |
605 | +# ============================================================================ |
606 | +# |
607 | +# SYNOPSIS |
608 | +# |
609 | +# AX_CXX_COMPILE_STDCXX_11([ext|noext], [mandatory|optional]) |
610 | +# |
611 | +# DESCRIPTION |
612 | +# |
613 | +# Check for baseline language coverage in the compiler for the C++11 |
614 | +# standard; if necessary, add switches to CXXFLAGS to enable support. |
615 | +# |
616 | +# This macro is a convenience alias for calling the AX_CXX_COMPILE_STDCXX |
617 | +# macro with the version set to C++11. The two optional arguments are |
618 | +# forwarded literally as the second and third argument respectively. |
619 | +# Please see the documentation for the AX_CXX_COMPILE_STDCXX macro for |
620 | +# more information. If you want to use this macro, you also need to |
621 | +# download the ax_cxx_compile_stdcxx.m4 file. |
622 | +# |
623 | +# LICENSE |
624 | +# |
625 | +# Copyright (c) 2008 Benjamin Kosnik <bkoz@redhat.com> |
626 | +# Copyright (c) 2012 Zack Weinberg <zackw@panix.com> |
627 | +# Copyright (c) 2013 Roy Stogner <roystgnr@ices.utexas.edu> |
628 | +# Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov <sokolov@google.com> |
629 | +# Copyright (c) 2015 Paul Norman <penorman@mac.com> |
630 | +# Copyright (c) 2015 Moritz Klammler <moritz@klammler.eu> |
631 | +# |
632 | +# Copying and distribution of this file, with or without modification, are |
633 | +# permitted in any medium without royalty provided the copyright notice |
634 | +# and this notice are preserved. This file is offered as-is, without any |
635 | +# warranty. |
636 | + |
637 | +#serial 14 |
638 | + |
639 | +include([ax_cxx_compile_stdcxx.m4]) |
640 | + |
641 | +AC_DEFUN([AX_CXX_COMPILE_STDCXX_11], [AX_CXX_COMPILE_STDCXX([11], [$1], [$2])]) |
642 | |
643 | === modified file 'src/perfedit.cpp' |
644 | --- src/perfedit.cpp 2010-11-23 21:33:18 +0000 |
645 | +++ src/perfedit.cpp 2016-01-21 23:56:07 +0000 |
646 | @@ -119,7 +119,7 @@ |
647 | /* snap */ |
648 | m_button_snap = manage( new Button()); |
649 | m_button_snap->add( *manage( new Image(Gdk::Pixbuf::create_from_xpm_data( snap_xpm )))); |
650 | - m_button_snap->signal_clicked().connect( bind<Menu *>( mem_fun( *this, &perfedit::popup_menu), m_menu_snap )); |
651 | + m_button_snap->signal_clicked().connect( sigc::bind<Menu *>( mem_fun( *this, &perfedit::popup_menu), m_menu_snap )); |
652 | add_tooltip( m_button_snap, "Grid snap. (Fraction of Measure Length)" ); |
653 | m_entry_snap = manage( new Entry()); |
654 | m_entry_snap->set_size_request( 40, -1 ); |
655 | @@ -152,7 +152,7 @@ |
656 | /* beats per measure */ |
657 | m_button_bpm = manage( new Button()); |
658 | m_button_bpm->add( *manage( new Image(Gdk::Pixbuf::create_from_xpm_data( down_xpm )))); |
659 | - m_button_bpm->signal_clicked().connect( bind<Menu *>( mem_fun( *this, &perfedit::popup_menu), m_menu_bpm )); |
660 | + m_button_bpm->signal_clicked().connect( sigc::bind<Menu *>( mem_fun( *this, &perfedit::popup_menu), m_menu_bpm )); |
661 | add_tooltip( m_button_bpm, "Time Signature. Beats per Measure" ); |
662 | m_entry_bpm = manage( new Entry()); |
663 | m_entry_bpm->set_width_chars(2); |
664 | @@ -162,7 +162,7 @@ |
665 | /* beat width */ |
666 | m_button_bw = manage( new Button()); |
667 | m_button_bw->add( *manage( new Image(Gdk::Pixbuf::create_from_xpm_data( down_xpm )))); |
668 | - m_button_bw->signal_clicked().connect( bind<Menu *>( mem_fun( *this, &perfedit::popup_menu), m_menu_bw )); |
669 | + m_button_bw->signal_clicked().connect( sigc::bind<Menu *>( mem_fun( *this, &perfedit::popup_menu), m_menu_bw )); |
670 | add_tooltip( m_button_bw, "Time Signature. Length of Beat" ); |
671 | m_entry_bw = manage( new Entry()); |
672 | m_entry_bw->set_width_chars(2); |
Looks good to me. Thanks you!