regular_concept.hpp
Go to the documentation of this file.
00001 /* 00002 Copyright 2005-2007 Adobe Systems Incorporated 00003 Distributed under the MIT License (see accompanying file LICENSE_1_0_0.txt 00004 or a copy at http://stlab.adobe.com/licenses.html) 00005 */ 00006 00007 /*************************************************************************************************/ 00008 00009 #ifndef ADOBE_REGULAR_HPP 00010 #define ADOBE_REGULAR_HPP 00011 00012 /*************************************************************************************************/ 00013 00014 #ifdef ADOBE_HAS_CPLUS0X_CONCEPTS 00015 00016 /*************************************************************************************************/ 00017 00018 #include <concepts> 00019 00020 /*************************************************************************************************/ 00021 00022 namespace adobe { 00023 00024 /*************************************************************************************************/ 00025 00026 auto concept RegularConcept<typename T> 00027 : std::CopyConstructible<T>, 00028 std::Assignable<T>, 00029 std::EqualityComparable<T>, 00030 std::Swappable<T>, 00031 std::DefaultConstructible<T> // not yet 00032 { 00033 }; 00034 00035 /*************************************************************************************************/ 00036 00037 } // namespace adobe 00038 00039 /*************************************************************************************************/ 00040 00041 #else 00042 00043 /*************************************************************************************************/ 00044 00045 #include <boost/concept_check.hpp> 00046 00047 /*************************************************************************************************/ 00048 00049 namespace adobe { 00050 00051 /*************************************************************************************************/ 00052 00053 template <class T> 00054 struct RegularConcept 00055 { 00056 00057 // Concept checking: 00058 00059 void constraints() { 00060 // refinement of: 00061 boost::function_requires<boost::CopyConstructibleConcept<T> >(); 00062 boost::function_requires<boost::AssignableConcept<T> >(); 00063 boost::function_requires<boost::EqualityComparableConcept<T> >(); 00064 // boost::function_requires<boost::SwappableConcept<T> >(); 00065 00066 swap(t,t); 00067 } 00068 #if !defined(ADOBE_NO_DOCUMENTATION) 00069 T t; 00070 #endif 00071 }; 00072 00073 /*************************************************************************************************/ 00074 00075 } // namespace adobe 00076 00077 /*************************************************************************************************/ 00078 00079 #endif 00080 00081 /*************************************************************************************************/ 00082 00083 #endif |