1 /*============================================================================= 2 Boost.Wave: A Standard compliant C++ preprocessor library 3 Explicit instantiation of the lex_functor generation function 4 5 http://www.boost.org/ 6 7 Copyright (c) 2001-2012 Hartmut Kaiser. Distributed under the Boost 8 Software License, Version 1.0. (See accompanying file 9 LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 10 =============================================================================*/ 11 12 #define BOOST_WAVE_SOURCE 1 13 14 // disable stupid compiler warnings 15 #include <boost/config/warning_disable.hpp> 16 #include <boost/wave/wave_config.hpp> // configuration data 17 18 #if BOOST_WAVE_SEPARATE_LEXER_INSTANTIATION != 0 19 20 #include <string> 21 22 #include <boost/wave/token_ids.hpp> 23 #include <boost/wave/cpplexer/cpp_lex_token.hpp> 24 #include <boost/wave/cpplexer/cpp_lex_iterator.hpp> 25 26 /////////////////////////////////////////////////////////////////////////////// 27 // The following file needs to be included only once throughout the whole 28 // program. 29 #include <boost/wave/cpplexer/re2clex/cpp_re2c_lexer.hpp> 30 31 // this must occur after all of the includes and before any code appears 32 #ifdef BOOST_HAS_ABI_HEADERS 33 #include BOOST_ABI_PREFIX 34 #endif 35 36 /////////////////////////////////////////////////////////////////////////////// 37 // 38 // This instantiates the correct 'new_lexer' function, which generates the 39 // C++ lexer used in this sample. You will have to instantiate the 40 // new_lexer_gen<> template with the same iterator type, as you have used for 41 // instantiating the boost::wave::context<> object. 42 // 43 // This is moved into a separate compilation unit to decouple the compilation 44 // of the C++ lexer from the compilation of the other modules, which helps to 45 // reduce compilation time. 46 // 47 // The template parameter(s) supplied should be identical to the first 48 // parameter supplied while instantiating the boost::wave::context<> template 49 // (see the file cpp.cpp). 50 // 51 /////////////////////////////////////////////////////////////////////////////// 52 53 // if you want to use another iterator type for the underlying input stream 54 // a corresponding explicit template instantiation needs to be added below 55 template struct BOOST_SYMBOL_VISIBLE boost::wave::cpplexer::new_lexer_gen< 56 BOOST_WAVE_STRINGTYPE::iterator>; 57 template struct BOOST_SYMBOL_VISIBLE boost::wave::cpplexer::new_lexer_gen< 58 BOOST_WAVE_STRINGTYPE::const_iterator>; 59 60 // the suffix header occurs after all of the code 61 #ifdef BOOST_HAS_ABI_HEADERS 62 #include BOOST_ABI_SUFFIX 63 #endif 64 65 #endif // BOOST_WAVE_SEPARATE_LEXER_INSTANTIATION != 0 66