//  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_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_variadic_macros {

template<TEST_VARIADIC_MACRO_STRIP_PARENS((typename T,int))> struct test_variadic_macro_class {};

int test()
{

  int x = TEST_VARIADIC_MACRO_STRIP_PARENS(3);
  
  return 0;
}

}
