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_MULTIPLICATION_HPP 00008 #define INSTIGATE_ALGEBRA_COMMUTATIVITY_MULTIPLICATION_HPP 00009 00035 // headers from this project 00036 00037 // headers from other project 00038 #include <generic/base.hpp> 00039 00040 // headers from standard project 00041 00042 // forward declarations 00043 namespace instigate { 00044 00045 namespace algebra { 00046 00055 namespace commutativity_multiplication { 00056 struct tag; 00057 template<typename T> struct interface; 00058 template<typename T> struct requirements; 00059 00060 } // namespace instigate::algebra::commutativity_multiplication 00061 00062 } // namespace instigate::algebra 00063 00064 } // namespace instigate 00065 00072 struct instigate::algebra::commutativity_multiplication::tag {}; 00073 00079 template<typename T> 00080 struct instigate::algebra::commutativity_multiplication::interface 00081 { 00086 static const bool is_specialized = instigate::algebra::interface<T>:: 00087 is_comutativity_multiplication; 00088 }; 00089 00098 template<typename T> 00099 struct instigate::algebra::commutativity_multiplication::requirements 00100 { 00101 00103 static void require_commutativity_multiplication() 00104 { 00105 CHECK(instigate::generic::require<instigate:: 00106 algebra::commutativity_multiplication:: 00107 interface<T>::is_specialized>); 00108 } 00109 00117 requirements() 00118 { 00119 (void)&require_commutativity_multiplication; 00120 } 00121 }; 00122 00123 // vim:et:tabstop=8:shiftwidth=8:cindent:fo=croq: 00124 00125 #endif // INSTIGATE_ALGEBRA_COMMUTATIVITY_MULTIPLICATION_HPP 00126