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,,,