boost_no_tem_local_classes.ipp 1.3 KB

123456789101112131415161718192021222324252627282930313233
  1. // Copyright (C) 2009-2012 Lorenzo Caminiti
  2. // Distributed under the Boost Software License, Version 1.0
  3. // (see accompanying file LICENSE_1_0.txt or a copy at
  4. // http://www.boost.org/LICENSE_1_0.txt)
  5. // Home at http://www.boost.org/libs/config
  6. // MACRO: BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS
  7. // TITLE: local classes as template parameters
  8. // DESCRIPTION: Local classes cannot be passed as template parameters.
  9. // NOTE: Local classes cannot be passed as template parameters in C++03 (even
  10. // if some C++03 compilers, like MSVC and older GCC, allow it). Local classes
  11. // can instead be passed as template parameters in C++11 (see also N2657, note
  12. // that this macro does not check if unnamed types can also be passed as
  13. // template parameters but it is intentionally limited to local named classes
  14. // because some non C++11 compilers might only support local named classes as
  15. // template parameters which is still very useful to program local functors).
  16. namespace boost_no_cxx11_local_class_template_parameters {
  17. template<typename T> struct a { void use() {} };
  18. template<typename T> void f(T) {}
  19. int test() {
  20. class local_class {} local_obj;
  21. a<local_class> a1;
  22. a1.use(); // Avoid unused variable warning.
  23. f(local_obj);
  24. return 0;
  25. }
  26. } // namespace