On 2010-09-01 15:30, Stefan Strasser wrote:
Zitat von Roland Bock :
Hi,
is there something in Boost.TypeTraits (or somewhere else) that allows
me to check if a type is a boost::optional?
I'd like to do something like this:
template<typename T>
typename enable_if, T::value_type>::type
foo(const T&);
there is nothing in type traits, but you can easily check for a specific
(template) type:
template<typename T>
struct is_optional : mpl::false_{};
template<typename T>
struct is_optional : mpl::true_{};
cerr << is_boost_optional::value << endl;
yields: 0
expected: 1
I don't see why you can't use an overload for boost::optional in the
first place though:
typename optional<T>::value_type foo(optional<T> const &);
Hmm. The situation is a bit more complex:
I have operands of the following type
template struct Field
{
typedef Value value_type;
template<typename T>
some_sfinae_magic operator==(const T&) const;
}
Value can be any numeric type, a string or an optional numeric/string.
T can be numeric type, string or a Field.
some_magic is supposed to check, if T is compatible to Field, either
is_convertible
is_convertible // with T being a Field
is_convertible // with T
being a Field and Field::value_type being an optional
is_convertible
// with T being a Field, both Fields having optional value_type
Since value_type is pretty common, a Field with Value=optional<char> and
string would be found compatible because string::value_type=char.
That's why I want to check if the Value/T::value_type is an optional.
Thanks for asking, I guess I just found a way to clean it up a little
while writing the stuff down.
Regards,
Roland