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
00029 #ifndef INSTIGATE_ALGEBRA_FIELD_HPP
00030 #define INSTIGATE_ALGEBRA_FIELD_HPP
00031
00032
00033 #include "concept.hpp"
00034
00035
00036 #include <generic/base.hpp>
00037
00038
00039
00040
00041 namespace instigate {
00042
00043 namespace algebra {
00044
00056 namespace field {
00057 struct tag;
00058 template <typename T> struct interface;
00059 template <typename T> struct requirements;
00060
00061 }
00062
00063 }
00064
00065 }
00066
00073 struct instigate::algebra::field::tag
00074 : instigate::algebra::ring::tag
00075 , instigate::algebra::commutativity_multiplication::tag
00076 , instigate::algebra::multiplicative_group::tag {};
00077
00083 template <typename T>
00084 struct instigate::algebra::field::interface :
00085 instigate::algebra::ring::interface<T>,
00086 instigate::algebra::commutativity_multiplication::interface<T>,
00087 instigate::algebra::multiplicative_group::interface<T> {};
00088
00097 template <typename T>
00098 struct instigate::algebra::field::requirements :
00099 instigate::algebra::ring::requirements<T>,
00100 instigate::algebra::commutativity_multiplication::requirements<T>,
00101 instigate::algebra::multiplicative_group::requirements<T> {};
00102
00103
00104
00105 #endif // INSTIGATE_ALGEBRA_FIELD_HPP