+++ /dev/null
-/* -*- C++ -*- ------------------------------------------------------------
-
-Copyright (c) 2007 Jesse Anders and Demian Nave http://cmldev.net/
-
-The Configurable Math Library (CML) is distributed under the terms of the
-Boost Software License, v1.0 (see cml/LICENSE for details).
-
- *-----------------------------------------------------------------------*/
-/** @file
- * @brief
- */
-
-#ifndef core_meta_common_h
-#define core_meta_common_h
-
-namespace cml {
-
-/** Type of a true statement. */
-struct true_type {};
-
-/** Type of a false statement. */
-struct false_type {};
-
-template<bool B> struct is_true {
- typedef false_type result;
-};
-
-template<> struct is_true<true> {
- typedef true_type result;
-};
-
-/** A "type pair". */
-template<typename T1, typename T2> struct type_pair {
- typedef T1 first;
- typedef T2 second;
-};
-
-/** A "type quadruple". */
-template<typename T1, typename T2, typename T3, typename T4>
-struct type_quad {
- typedef T1 first;
- typedef T2 second;
- typedef T3 third;
- typedef T3 fourth;
-};
-
-/** Match any type (for use with same_type<> and select_switch<>). */
-struct any_type {};
-
-/** Determine if two types are the same.
- *
- * Defaults to false.
- */
-template<typename T, typename U> struct same_type {
- typedef false_type result;
- enum { is_true = false, is_false = true };
-};
-
-/** Match the same type for both of same_type's template arguments. */
-template<typename T> struct same_type<T,T> {
- typedef true_type result;
- enum { is_true = true, is_false = false };
-};
-
-/** Match a type and any_type. */
-template<typename T> struct same_type<T,any_type> {
- typedef true_type result;
- enum { is_true = true, is_false = false };
-};
-
-/** Match a type and any_type. */
-template<typename T> struct same_type<any_type,T> {
- typedef true_type result;
- enum { is_true = true, is_false = false };
-};
-
-/** Disambiguate pair of any_type's. */
-template<> struct same_type<any_type,any_type> {
- typedef true_type result;
- enum { is_true = true, is_false = false };
-};
-
-/** Remove a reference qualifier from a type. */
-template<typename T> struct remove_reference {
- template<typename Q, typename Dummy> struct helper {
- typedef Q type;
- };
-
- template<typename Q> struct helper<Q&, void> {
- typedef Q type;
- };
-
- template<typename Q> struct helper<const Q&, void> {
- typedef const Q type;
- };
-
- typedef typename helper<T,void>::type type;
-};
-
-/** Remove a const qualifier from a type. */
-template<typename T> struct remove_const {
- template<typename Q, typename Dummy> struct helper {
- typedef Q type;
- };
-
- template<typename Q> struct helper<const Q, void> {
- typedef Q type;
- };
-
- typedef typename helper<T,void>::type type;
-};
-
-} // namespace cml
-
-#endif
-
-// -------------------------------------------------------------------------
-// vim:ft=cpp