std::shared_ptrを噛ませても、親クラスに子クラスのオブジェクト突っ込める

「あれ?これOKだったっけ?」という話の確認で、具体的には「Baseを継承したDerivedのshared_ptrをBaseのshared_ptrに入れれたっけな?」という。
よく考えると、これが出来ないとshared_ptr使って動的多態できなくなるので、出来て当たり前か…

↓サンプルコード、ちゃんと代入出来てる&コンパイル通る&欲しい結果になる。

#include <iostream>
#include <memory>
//適当な継承関係のあるクラス
class Base
{
public:
	void sayHello(){ std::cout << "Hello" << std::endl; }
};
class Derived : public Base{};
//Baseを引数にhelloと言わせる関数
void sayHello(const std::shared_ptr<Base> & b){ b->sayHello(); }
//main
int main()
{
	std::shared_ptr<Base> b(std::make_shared<Base>());
	std::shared_ptr<Derived> d(std::make_shared<Derived>());
	sayHello(b);
	sayHello(d);
	return 0;
}