1m4_dnl 2m4_dnl Copyright (C) 2000 Stephen Cleary 3m4_dnl 4m4_dnl Distributed under the Boost Software License, Version 1.0. (See accompany- 5m4_dnl ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6m4_dnl 7m4_dnl See http://www.boost.org for updates, documentation, and revision history. 8m4_dnl 9m4_dnl 10m4_dnl 11m4_dnl Avoid the use of any m4_* identifiers in this header file, 12m4_dnl as that may cause incompatibility problems with future 13m4_dnl versions of m4. 14m4_dnl 15m4_dnl This is a normal header file, except that lines starting 16m4_dnl with `m4_dnl' will be stripped, TBA_FOR 17m4_dnl macros will be replaced with repeated text, and text in 18m4_dnl single quotes (`...') will have their single quotes 19m4_dnl stripped. 20m4_dnl 21m4_dnl 22m4_dnl Check to make sure NumberOfArguments was defined. If it's not defined, 23m4_dnl default to 3 24m4_dnl 25m4_ifdef(`NumberOfArguments', , `m4_errprint(m4___file__:m4___line__`: NumberOfArguments is not defined; defaulting to 3 26')m4_define(`NumberOfArguments', 3)')m4_dnl 27m4_ifelse(NumberOfArguments, , `m4_errprint(m4___file__:m4___line__`: NumberOfArguments is defined to be empty; defaulting to 3 28')m4_define(`NumberOfArguments', 3)')m4_dnl 29m4_dnl 30m4_dnl Check to make sure NumberOfArguments >= 1. If it's not, then fatal error. 31m4_dnl 32m4_ifelse(m4_eval(NumberOfArguments < 1), 1, `m4_errprint(m4___file__:m4___line__`: NumberOfArguments ('NumberOfArguments`) is less than 1 33')m4_m4exit(1)')m4_dnl 34m4_dnl 35m4_dnl Include the BOOST_M4_FOR macro definition 36m4_dnl 37m4_include(`for.m4')`'m4_dnl 38m4_dnl 39m4_dnl Begin the generated file. 40m4_dnl 41// Copyright (C) 2000 Stephen Cleary 42// 43// Distributed under the Boost Software License, Version 1.0. (See accompany- 44// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 45// 46// See http://www.boost.org for updates, documentation, and revision history. 47 48m4_dnl These warnings apply to the file generated from this file. 49m4_dnl Of course, you may freely edit this file. 50// This file was AUTOMATICALLY GENERATED from "m4___file__" 51// Do NOT include directly! 52// Do NOT edit! 53 54m4_dnl 55m4_dnl First we define a simple 'cv_qual' macro which takes a number, either 56m4_dnl 0, 1, 2, or 3, and determines cv-qualification. 57m4_dnl 58m4_define(`cv_qual', 59`m4_ifelse($1, 0, `', 60`m4_ifelse($1, 1, `const ', 61`m4_ifelse($1, 2, `volatile ', 62`m4_ifelse($1, 3, `const volatile ', 63`m4_errprint(m4___file__:m4___line__: `Boost m4 script: cv-determiner: Not 0, 1, 2, or 3 (was '$1`)')' 64)')')')')m4_dnl 65m4_dnl 66m4_dnl Next we go through the actual loop. For each number of arguments from 67m4_dnl 1 to NumberOfArguments, we create a template function that takes that 68m4_dnl many template arguments, and also generate all cv-qualified permutations 69m4_dnl of that function. 70m4_dnl 71BOOST_M4_FOR(N, 1, NumberOfArguments + 1, 72`BOOST_M4_FOR(cv, 0, m4_eval(4 ** N), 73 `template <BOOST_M4_FOR(i, 0, N, `typename T`'i', `, ')> 74element_type * construct(BOOST_M4_FOR(i, 0, N, 75 `cv_qual(m4_eval((cv >> (i * 2)) % 4))T`'i & a`'i', `, ')) 76{ 77 element_type * const ret = (malloc)(); 78 if (ret == 0) 79 return ret; 80 try { new (ret) element_type(BOOST_M4_FOR(i, 0, N, `a`'i', `, ')); } 81 catch (...) { (free)(ret); throw; } 82 return ret; 83} 84')') 85