id summary reporter owner description type status milestone component version severity resolution keywords cc 7730 Generic specializations of is_nullary for custom terminals are not possible Andrey Semashev Thomas Heller "The is_nullary trait is specialized for all custom_terminal to be true (see phoenix/code/is_nullary.hpp). {{{ template struct is_nullary > : mpl::true_ {}; }}} This is not true with regard to multiple terminals I define in Boost.Log. This forces me to specialize is_nullary for all my custom terminals, and I cannot provide a single blanket specialization for all my terminals. The is_nullary trait has a second template parameter which is intended to be used exactly for this purpose. A nested tag void typedef can be used to match the trait for a set of types. I could create the following specialization: {{{ template struct is_nullary, typename T::_is_my_terminal > : mpl::false_ {}; }}} However this extension mechanism does not work because the two specializations are considered equally specialized and the compiler reports ambiguity. I suggest to limit the first specialization to only match the default custom terminals, e.g.: {{{ template struct is_nullary, typename custom_terminal::_is_default_custom_terminal > : mpl::true_ {}; }}} Where typedef void _is_default_custom_terminal will be added to the generic custom_terminal template. " Bugs new To Be Determined phoenix Boost 1.52.0 Problem