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