diff --git a/include/boost/pending/property.hpp b/include/boost/pending/property.hpp index 93b3cd84..93ebffbf 100644 --- a/include/boost/pending/property.hpp +++ b/include/boost/pending/property.hpp @@ -8,6 +8,7 @@ #include #include +#include #include #include @@ -29,10 +30,19 @@ namespace boost { }; // Kinds of properties + namespace graph_introspect_detail { + BOOST_MPL_HAS_XXX_TRAIT_DEF(kind) + template struct get_kind {typedef void type;}; + template struct get_kind {typedef typename T::kind type;}; + } + + // Having a default is to make this trait work for any type, not just valid + // properties, to work around VC++ <= 10 bugs related to SFINAE in + // compressed_sparse_row_graph's get functions and similar template - struct property_kind { - typedef typename PropertyTag::kind type; - }; + struct property_kind: + graph_introspect_detail::get_kind::value> + {}; // Some standard properties defined independently of Boost.Graph: enum vertex_all_t {vertex_all};