id,summary,reporter,owner,description,type,status,milestone,component,version,severity,resolution,keywords,cc 12140,"Warning about useless ""explicit"" in base_from_member.hpp",Thimo Neubauer ,Marshall Clow,"In our build with Intel Compiler XE 2016 we have the additional warning option {{{-Wnon-virtual-dtor}}} enabled. With it we get the following massive warning: {{{ In file included from ../../../Third_Party_Libraries/Boost/include/boost/utility.hpp(13), from ../../../Third_Party_Libraries/Boost/include/boost/iterator/reverse_iterator.hpp(10), from ../../../Third_Party_Libraries/Boost/include/boost/range/reverse_iterator.hpp(18), from ../../../Third_Party_Libraries/Boost/include/boost/range/rbegin.hpp(18), from ../../../Third_Party_Libraries/Boost/include/boost/range/functions.hpp(23), from ../../../Third_Party_Libraries/Boost/include/boost/range/iterator_range_core.hpp(24), from ../../../Third_Party_Libraries/Boost/include/boost/range/iterator_range.hpp(13), from ../../../Third_Party_Libraries/Boost/include/boost/assign/list_of.hpp(20), from ../../../Third_Party_Libraries/Boost/include/boost/assign.hpp(20), from 1DFunction.cpp(3): ../../../Third_Party_Libraries/Boost/include/boost/utility/base_from_member.hpp(75): warning #2305: declaration of 'explicit' constructor without a single argument is redundant template < typename T0 > explicit base_from_member( T0 x0 ) : member( x0 ) {} template < typename T0 , typename T1 > explicit base_from_member( T0 x0 , T1 x1 ) : member( x0 , x1 ) {} template < typename T0 , typename T1 , typename T2 > explicit base_from_member( T0 x0 , T1 x1 , T2 x2 ) : member( x0 , x1 , x2 ) {} template < typename T0 , typename T1 , typename T2 , typename T3 > explicit base_from_member( T0 x0 , T1 x1 , T2 x2 , T3 x3 ) : member( x0 , x1 , x2 , x3 ) {} template < typename T0 , typename T1 , typename T2 , typename T3 , typename T4 > explicit base_from_member( T0 x0 , T1 x1 , T2 x2 , T3 x3 , T4 x4 ) : member( x0 , x1 , x2 , x3 , x4 ) {} template < typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 > explicit base_from_member( T0 x0 , T1 x1 , T2 x2 , T3 x3 , T4 x4 , T5 x5 ) : member( x0 , x1 , x2 , x3 , x4 , x5 ) {} template < typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 > explicit base_from_member( T0 x0 , T1 x1 , T2 x2 , T3 x3 , T4 x4 , T5 x5 , T6 x6 ) : member( x0 , x1 , x2 , x3 , x4 , x5 , x6 ) {} template < typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 > explicit base_from_member( T0 x0 , T1 x1 , T2 x2 , T3 x3 , T4 x4 , T5 x5 , T6 x6 , T7 x7 ) : member( x0 , x1 , x2 , x3 , x4 , x5 , x6 , x7 ) {} template < typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 > explicit base_from_member( T0 x0 , T1 x1 , T2 x2 , T3 x3 , T4 x4 , T5 x5 , T6 x6 , T7 x7 , T8 x8 ) : member( x0 , x1 , x2 , x3 , x4 , x5 , x6 , x7 , x8 ) {} template < typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 > explicit base_from_member( T0 x0 , T1 x1 , T2 x2 , T3 x3 , T4 x4 , T5 x5 , T6 x6 , T7 x7 , T8 x8 , T9 x9 ) : member( x0 , x1 , x2 , x3 , x4 , x5 , x6 , x7 , x8 , x9 ) {} ^ }}} The fix isn't too difficult: add the one-argument constructor explicitly (and with explicit keyword) and let the preprocessor generate the rest without. I've attached the fix for Boost 1.60",Patches,closed,To Be Determined,utility,Boost 1.61.0,Problem,fixed,,