mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-29 20:10:28 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			65 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //  Copyright (C) 2010 Edward Diener
 | |
| //  Use, modification and distribution are subject to the
 | |
| //  Boost Software License, Version 1.0. (See accompanying file
 | |
| //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 | |
| 
 | |
| //  See http://www.boost.org/libs/config for most recent version.
 | |
| 
 | |
| //  MACRO:         BOOST_NO_CXX11_VARIADIC_MACROS
 | |
| //  TITLE:         C++0x variadic macros unavailable
 | |
| //  DESCRIPTION:   The compiler does not support C++0x variadic macros
 | |
| 
 | |
| // This is a simple test
 | |
| 
 | |
| #define TEST_VARIADIC_MACRO_SIMPLE(avalue,...) __VA_ARGS__
 | |
| 
 | |
| /* 
 | |
| 
 | |
|   This is a more complicated test, which Steve Watanabe graciously 
 | |
|   supplied, when I asked if it were possible to strip the parantheses 
 | |
|   from a macro argument. I have changed the names somewhat to prevent 
 | |
|   any common clashes with other macros in the config testing suite 
 | |
|   by prepending to each macro name TEST_VARIADIC_MACRO_.
 | |
|   
 | |
|   You may find this test overdone and may want to remove it.
 | |
|   
 | |
| */
 | |
| 
 | |
| #define TEST_VARIADIC_MACRO_CAT(x, y) TEST_VARIADIC_MACRO_CAT_I(x, y)
 | |
| #define TEST_VARIADIC_MACRO_CAT_I(x, y) x ## y
 | |
| 
 | |
| #define TEST_VARIADIC_MACRO_APPLY(macro, args) TEST_VARIADIC_MACRO_APPLY_I(macro, args)
 | |
| #define TEST_VARIADIC_MACRO_APPLY_I(macro, args) macro args
 | |
| 
 | |
| #define TEST_VARIADIC_MACRO_STRIP_PARENS(x) TEST_VARIADIC_MACRO_EVAL((TEST_VARIADIC_MACRO_STRIP_PARENS_I x), x)
 | |
| #define TEST_VARIADIC_MACRO_STRIP_PARENS_I(...) 1,1
 | |
| 
 | |
| #define TEST_VARIADIC_MACRO_EVAL(test, x) TEST_VARIADIC_MACRO_EVAL_I(test, x)
 | |
| #define TEST_VARIADIC_MACRO_EVAL_I(test, x) TEST_VARIADIC_MACRO_MAYBE_STRIP_PARENS(TEST_VARIADIC_MACRO_TEST_ARITY test, x)
 | |
| 
 | |
| #define TEST_VARIADIC_MACRO_TEST_ARITY(...) TEST_VARIADIC_MACRO_APPLY(TEST_VARIADIC_MACRO_TEST_ARITY_I, (__VA_ARGS__, 2, 1))
 | |
| #define TEST_VARIADIC_MACRO_TEST_ARITY_I(a,b,c,...) c
 | |
| 
 | |
| #define TEST_VARIADIC_MACRO_MAYBE_STRIP_PARENS(cond, x) TEST_VARIADIC_MACRO_MAYBE_STRIP_PARENS_I(cond, x)
 | |
| #define TEST_VARIADIC_MACRO_MAYBE_STRIP_PARENS_I(cond, x) TEST_VARIADIC_MACRO_CAT(TEST_VARIADIC_MACRO_MAYBE_STRIP_PARENS_, cond)(x)
 | |
| 
 | |
| #define TEST_VARIADIC_MACRO_MAYBE_STRIP_PARENS_1(x) x
 | |
| #define TEST_VARIADIC_MACRO_MAYBE_STRIP_PARENS_2(x) TEST_VARIADIC_MACRO_APPLY(TEST_VARIADIC_MACRO_MAYBE_STRIP_PARENS_2_I, x)
 | |
| #define TEST_VARIADIC_MACRO_MAYBE_STRIP_PARENS_2_I(...) __VA_ARGS__
 | |
| 
 | |
| namespace boost_no_cxx11_variadic_macros {
 | |
| 
 | |
| void quiet_warning(int){}
 | |
| 
 | |
| template<TEST_VARIADIC_MACRO_STRIP_PARENS((typename T,int))> struct test_variadic_macro_class {};
 | |
| 
 | |
| int test()
 | |
| {
 | |
| 
 | |
|   int x = TEST_VARIADIC_MACRO_STRIP_PARENS(3);
 | |
|   quiet_warning(x);
 | |
|   return 0;
 | |
| }
 | |
| 
 | |
| }
 |