iLab Neuromorphic Robotics Toolkit  0.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ErrorType.H
Go to the documentation of this file.
1 /*! @file
2  @author Randolph Voorhies
3  @copyright GNU Public License (GPL v3)
4  @section License
5  @verbatim
6  // ////////////////////////////////////////////////////////////////////////
7  // The iLab Neuromorphic Robotics Toolkit (NRT) //
8  // Copyright 2010-2012 by the University of Southern California (USC) //
9  // and the iLab at USC. //
10  // //
11  // iLab - University of Southern California //
12  // Hedco Neurociences Building, Room HNB-10 //
13  // Los Angeles, Ca 90089-2520 - USA //
14  // //
15  // See http://ilab.usc.edu for information about this project. //
16  // ////////////////////////////////////////////////////////////////////////
17  // This file is part of The iLab Neuromorphic Robotics Toolkit. //
18  // //
19  // The iLab Neuromorphic Robotics Toolkit is free software: you can //
20  // redistribute it and/or modify it under the terms of the GNU General //
21  // Public License as published by the Free Software Foundation, either //
22  // version 3 of the License, or (at your option) any later version. //
23  // //
24  // The iLab Neuromorphic Robotics Toolkit is distributed in the hope //
25  // that it will be useful, but WITHOUT ANY WARRANTY; without even the //
26  // implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
27  // PURPOSE. See the GNU General Public License for more details. //
28  // //
29  // You should have received a copy of the GNU General Public License //
30  // along with The iLab Neuromorphic Robotics Toolkit. If not, see //
31  // <http://www.gnu.org/licenses/>. //
32  // ////////////////////////////////////////////////////////////////////////
33  @endverbatim */
34 
35 
36 #ifndef INCLUDE_NRT_CORE_TYPING_ERRORTYPE_H
37 #define INCLUDE_NRT_CORE_TYPING_ERRORTYPE_H
38 
39 namespace nrt
40 {
41  /*! \defgroup typingmisc Misc types defined by NRT
42  \ingroup typing */
43 
44  //! A type to indicate an error in metaprogramming
45  /*! Useful in metaprogramming to give errors where a static_assert isn't appropriate. For example, we need a class
46  that indicates whether a type is an EvenCoolerClass or not, and typedef it if it is. What should we do if it isn't
47  though? We want to let people know that they are accessing something that could be, but isn't defined.
48 
49  @code
50  template <class T>
51  class MyCoolClass
52  {
53  static const bool is_even_cooler = 0;
54  typedef NotATypeError MyCoolType;
55  }
56 
57  // T is EvenCoolerClass
58  template <>
59  class MyCoolClass<EvenCoolerClass>
60  {
61  static const bool is_even_cooler = 1;
62  typedef EvenCoolerClass MyCoolType;
63  }
64  @endcode
65 
66  \ingroup typingmisc */
67  struct NotATypeError
68  {
69  //template <class T>
70  //NotATypeError(T const & some_type);
71  };
72 }
73 
74 #endif // INCLUDE_NRT_CORE_TYPING_ERRORTYPE_H