00001 00002 #ifndef _INSTIGATE_OPEN_SOURCE_INTERNAL_HEADER_IN_CONCEPT 00003 #error This is an internal header file used to implement Instigate Algebra.\ 00004 It should never be included directly by a program. 00005 #endif 00006 00007 #ifndef INSTIGATE_ALGEBRA_COMMUTATIVITY_ADDITION_HPP 00008 #define INSTIGATE_ALGEBRA_COMMUTATIVITY_ADDITION_HPP 00009 00034 // headers from this project 00035 00036 // headers from other project 00037 #include <generic/base.hpp> 00038 00039 // headers from standart project 00040 00041 // forward declarations 00042 namespace instigate { 00043 00044 namespace algebra { 00045 00054 namespace commutativity_addition { 00055 struct tag; 00056 template<typename T> struct interface; 00057 template<typename T> struct requirements; 00058 00059 } // namespace instigate::algebra::commutativity_addition 00060 00061 } // namespace instigate::algebra 00062 00063 } // namespace instigate 00064 00071 struct instigate::algebra::commutativity_addition::tag {}; 00072 00077 template<typename T> 00078 struct instigate::algebra::commutativity_addition::interface 00079 { 00084 static const bool is_specialized = instigate::algebra::interface<T>:: 00085 is_comutativity_addition; 00086 }; 00087 00096 template<typename T> 00097 struct instigate::algebra::commutativity_addition::requirements 00098 { 00099 00101 static void require_commutativity_addition() 00102 { 00103 CHECK(instigate::generic::require<instigate:: 00104 algebra::commutativity_addition::interface<T>:: 00105 is_specialized>); 00106 } 00107 00115 requirements() 00116 { 00117 (void)&require_commutativity_addition; 00118 } 00119 }; 00120 00121 // vim:et:tabstop=8:shiftwidth=8:cindent:fo=croq: 00122 00123 #endif // INSTIGATE_ALGEBRA_COMMUTATIVITY_ADDITION_HPP 00124 00125