//*****************************************************************************
// Copyright (c) 2003. All rights reserved.
// Developed by Jarl Lindrud.
// Contact: jlindrud@hotmail.com .
//*****************************************************************************
#ifndef INCLUDE_UTIL_META_HPP
#define INCLUDE_UTIL_META_HPP
namespace Meta {
// Null
struct Null {};
struct True { enum { Val=true }; char a[1]; };
struct False { enum { Val=false }; char a[2]; };
// Boolean operations
template<bool Cond>
struct Bool;
template<>
struct Bool<true> { typedef True Val; };
template<>
struct Bool<false> { typedef False Val; };
// Integers
template<int N>
struct Int {
enum { Val = N };
};
// Select - type selection based on a Bool condition
template <typename Cond, typename A, typename B>
struct Select;
template <typename A, typename B>
struct Select<True, A, B> { typedef A Val; };
template <typename A, typename B>
struct Select<False, A, B> { typedef B Val; };
} // namespace Meta
#endif // ! INCLUDE_UTIL_META_HPP