00001 00002 #ifndef _INSTIGATE_OPEN_SOURCE_INTERNAL_HEADER_IN_CONCEPT 00003 #error This is an internal header file used to implement Instigate STL.\ 00004 It should never be included directly by a program. 00005 #endif 00006 00007 #ifndef INSTIGATE_STL_UNARY_PREDICATE_HPP 00008 #define INSTIGATE_STL_UNARY_PREDICATE_HPP 00009 00059 // Headers from this project 00060 #include "_unary_function.hpp" 00061 00062 // Headers from other projects 00063 #include <generic/base.hpp> 00064 00065 // Headers from standard libraries 00066 00067 // Forward declarations 00068 namespace instigate { 00069 namespace stl { 00079 namespace unary_predicate { 00080 template <typename UP> struct interface; 00081 template <typename UP> struct requirements; 00082 } 00083 } 00084 } 00085 00090 template <typename UP> 00091 struct instigate::stl::unary_predicate::interface 00092 : instigate::stl::unary_function::interface<UP> 00093 { 00094 }; 00095 00103 template <typename T> 00104 struct instigate::stl::unary_predicate::requirements 00105 : instigate::stl::unary_function::requirements<T> 00106 { 00111 static void require_convertibility_of_result_type_to_bool() 00112 { 00113 namespace UP = instigate::stl::unary_predicate; 00114 typedef UP::interface<T> I; 00115 CHECK_CONVERTIBILITY(typename I::result_type, bool); 00116 } 00117 00122 requirements() 00123 { 00124 (void)require_convertibility_of_result_type_to_bool; 00125 } 00126 00127 }; 00128 00129 // vim:et:tabstop=8:shiftwidth=8:cindent:fo=croq:textwidth=80: 00130 00131 #endif // INSTIGATE_STL_UNARY_PREDICATE_HPP 00132