Loading [MathJax]/extensions/TeX/AMSsymbols.js
 Reference documentation for deal.II version 8.5.1
All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
tuple.h
1 // ---------------------------------------------------------------------
2 //
3 // Copyright (C) 2009 - 2014 by the deal.II authors
4 //
5 // This file is part of the deal.II library.
6 //
7 // The deal.II library is free software; you can use it, redistribute
8 // it, and/or modify it under the terms of the GNU Lesser General
9 // Public License as published by the Free Software Foundation; either
10 // version 2.1 of the License, or (at your option) any later version.
11 // The full text of the license can be found in the file LICENSE at
12 // the top level of the deal.II distribution.
13 //
14 // ---------------------------------------------------------------------
15 
16 #ifndef dealii__std_cxx11_tuple_h
17 #define dealii__std_cxx11_tuple_h
18 
19 
20 #include <deal.II/base/config.h>
21 
22 #ifdef DEAL_II_WITH_CXX11
23 
24 # include <tuple>
25 DEAL_II_NAMESPACE_OPEN
26 namespace std_cxx11
27 {
28  using std::tuple;
29  using std::make_tuple;
30  using std::get;
31  using std::tuple_size;
32  using std::tuple_element;
33 }
34 DEAL_II_NAMESPACE_CLOSE
35 
36 #else
37 
38 #include <boost/tuple/tuple.hpp>
39 DEAL_II_NAMESPACE_OPEN
40 namespace std_cxx11
41 {
42  using boost::tuple;
43  using boost::make_tuple;
44  using boost::get;
45 
46  // boost::tuples::length has been renamed
47  // by the standard to std::tuple_size
48  template <typename T>
49  struct tuple_size
50  {
51  static const std::size_t value = boost::tuples::length<T>::value;
52  };
53 
54  // similarly, boost::tuples::element has
55  // been renamed by the standard to
56  // std::tuple_element
57  template <int N, typename T>
58  struct tuple_element
59  {
60  typedef typename boost::tuples::element<N,T>::type type;
61  };
62 }
63 DEAL_II_NAMESPACE_CLOSE
64 
65 #endif
66 
67 // then allow using the old namespace name instead of the new one
68 DEAL_II_NAMESPACE_OPEN
69 namespace std_cxx1x = std_cxx11;
70 DEAL_II_NAMESPACE_CLOSE
71 
72 #endif