- #include <iostream> 
- #include <string> 
- #include <vector> 
- #include <map> 
- #include <array> 
- #include <iomanip> 
- #include <set> 
- #include <tuple> 
- #include <algorithm> 
- #include <vector> 
- #include <bitset> 
- #include <list> 
- #include <fstream> 
- #include <memory> 
- #include <sstream> 
- #include <chrono> 
- #include <ctime> 
- #include <iomanip> 
- #include <locale> 
- #include <cstring> 
- #include <cmath> 
- #include <complex> 
- #include <queue> 
- #include <cstdint> 
- #include <random> 
- #include <array> 
- #include <typeinfo> 
- #include <thread> 
- #include <mutex> 
- #include <cassert> 
- #include <functional> 
- #include <atomic> 
- #include <future> 
- #include <tuple> 
- #include <iterator> 
- #include <unordered_map> 
- #include <deque> 
-   
- using namespace std; 
-   
-   
-   
- class A 
- { 
- protected: 
-     int m_X; 
- public: 
-     A() {  
-         std::cout << "in A ctor" << std::endl;  
-         m_X = 0; 
-     } 
-     virtual void printX(){ std::cout << "in A " << m_X << std::endl; } 
- }; 
-   
- class B : public A 
- { 
- public: 
-     B() { 
-         std::cout << "in B ctor" << std::endl;  
-         m_X = 1; 
-     } 
-     virtual void printX(){ std::cout << "in B " << m_X << std::endl; } 
- }; 
-   
- class As 
- { 
- public: 
-     void AddA(  A &a ){ m_As.push_back( std::ref(a) ); } 
-     void PrintXs() const 
-     { 
-         for ( auto a : m_As ) 
-         { 
-             a.get().printX(); 
-         } 
-     } 
- private: 
-     std::vector<std::reference_wrapper<A>> m_As; 
- }; 
-   
- int main() 
- { 
-     As as; 
-     B b; 
-     as.AddA( b ); 
-     as.PrintXs(); 
-     system("pause"); 
-     return 0; 
- } 
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8YXJyYXk+CiNpbmNsdWRlIDxpb21hbmlwPgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8dHVwbGU+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxiaXRzZXQ+CiNpbmNsdWRlIDxsaXN0PgojaW5jbHVkZSA8ZnN0cmVhbT4KI2luY2x1ZGUgPG1lbW9yeT4KI2luY2x1ZGUgPHNzdHJlYW0+CiNpbmNsdWRlIDxjaHJvbm8+CiNpbmNsdWRlIDxjdGltZT4KI2luY2x1ZGUgPGlvbWFuaXA+CiNpbmNsdWRlIDxsb2NhbGU+CiNpbmNsdWRlIDxjc3RyaW5nPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxjb21wbGV4PgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxjc3RkaW50PgojaW5jbHVkZSA8cmFuZG9tPgojaW5jbHVkZSA8YXJyYXk+CiNpbmNsdWRlIDx0eXBlaW5mbz4KI2luY2x1ZGUgPHRocmVhZD4KI2luY2x1ZGUgPG11dGV4PgojaW5jbHVkZSA8Y2Fzc2VydD4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxhdG9taWM+CiNpbmNsdWRlIDxmdXR1cmU+CiNpbmNsdWRlIDx0dXBsZT4KI2luY2x1ZGUgPGl0ZXJhdG9yPgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KI2luY2x1ZGUgPGRlcXVlPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCgoKY2xhc3MgQQp7CnByb3RlY3RlZDoKICAgIGludCBtX1g7CnB1YmxpYzoKICAgIEEoKSB7IAogICAgICAgIHN0ZDo6Y291dCA8PCAiaW4gQSBjdG9yIiA8PCBzdGQ6OmVuZGw7IAogICAgICAgIG1fWCA9IDA7CiAgICB9CiAgICB2aXJ0dWFsIHZvaWQgcHJpbnRYKCl7IHN0ZDo6Y291dCA8PCAiaW4gQSAiIDw8IG1fWCA8PCBzdGQ6OmVuZGw7IH0KfTsKCmNsYXNzIEIgOiBwdWJsaWMgQQp7CnB1YmxpYzoKICAgIEIoKSB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJpbiBCIGN0b3IiIDw8IHN0ZDo6ZW5kbDsgCiAgICAgICAgbV9YID0gMTsKICAgIH0KICAgIHZpcnR1YWwgdm9pZCBwcmludFgoKXsgc3RkOjpjb3V0IDw8ICJpbiBCICIgPDwgbV9YIDw8IHN0ZDo6ZW5kbDsgfQp9OwoKY2xhc3MgQXMKewpwdWJsaWM6CiAgICB2b2lkIEFkZEEoICBBICZhICl7IG1fQXMucHVzaF9iYWNrKCBzdGQ6OnJlZihhKSApOyB9CiAgICB2b2lkIFByaW50WHMoKSBjb25zdAogICAgewogICAgICAgIGZvciAoIGF1dG8gYSA6IG1fQXMgKQogICAgICAgIHsKICAgICAgICAgICAgYS5nZXQoKS5wcmludFgoKTsKICAgICAgICB9CiAgICB9CnByaXZhdGU6CiAgICBzdGQ6OnZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEE+PiBtX0FzOwp9OwoKaW50IG1haW4oKQp7CiAgICBBcyBhczsKICAgIEIgYjsKICAgIGFzLkFkZEEoIGIgKTsKICAgIGFzLlByaW50WHMoKTsKICAgIHN5c3RlbSgicGF1c2UiKTsKICAgIHJldHVybiAwOwp9