/* Copyright 2006-2009 Joaquin M Lopez Munoz. | |
* Distributed under the Boost Software License, Version 1.0. | |
* (See accompanying file LICENSE_1_0.txt or copy at | |
* http://www.boost.org/LICENSE_1_0.txt) | |
* | |
* See http://www.boost.org/libs/flyweight for library home page. | |
*/ | |
#ifndef BOOST_FLYWEIGHT_DETAIL_NESTED_XXX_IF_NOT_PH_HPP | |
#define BOOST_FLYWEIGHT_DETAIL_NESTED_XXX_IF_NOT_PH_HPP | |
#if defined(_MSC_VER)&&(_MSC_VER>=1200) | |
#pragma once | |
#endif | |
#include <boost/flyweight/detail/is_placeholder_expr.hpp> | |
#include <boost/mpl/if.hpp> | |
/* nested_##name##_if_not_placeholder_expression<T>::type is T::name unless | |
* T is an MPL placeholder expression, in which case it defaults to int. | |
*/ | |
#define BOOST_FLYWEIGHT_NESTED_XXX_IF_NOT_PLACEHOLDER_EXPRESSION_DEF(name) \ | |
struct nested_##name##_if_not_placeholder_expression_helper \ | |
{ \ | |
typedef int name; \ | |
}; \ | |
\ | |
template<typename T> \ | |
struct nested_##name##_if_not_placeholder_expression \ | |
{ \ | |
typedef typename boost::mpl::if_< \ | |
boost::flyweights::detail::is_placeholder_expression<T>, \ | |
nested_##name##_if_not_placeholder_expression_helper, \ | |
T \ | |
>::type::name type; \ | |
}; | |
#endif |