:
. :
func(1);
(2) , func<int>. func(Parent ) , Parent int, .
func(Parent());
: func<Parent> func(Parent ). , . , 3b: , func(Parent ).
func(Child());
: func<Child> func(Parent ). Child, , ( ). Parent, . (.. ), . func(Parent ) - , . func<Child> - .
func(Parent) Child?
Child Parent :
Child c;
func(static_cast<Parent>(c));
, Child, 3- ( 3- ):
void func(Child );
, - :
template <typename T,
typename = std::enable_if_t<
!std::is_convertible<T*, Parent*>::value
>>
void func(T );
( SFINAE) func<Child> , func(Parent ).