What will be displayed when the following code is executed:
#include <iostream>

template<class T>struct Counter {
  Counter() {  ++count;    }
  static int count;

template<class T> int Counter<T>::count = 0;

struct Derived1: Counter<Derived1>  {};

struct Derived2: Counter<Derived2>  {};

int main(int argc, char** argv)
  Derived1 a, b;
  Derived2 c;
  std::cout << Derived1::count << Derived2::count << '\n';
  return 0;
The so-called Curiously recurring template pattern (CRTP) takes place​ when the descendent passes himself to the base class as a template parameter. Since Counter<Derived1> and Counter<Derived2> - are different types of objects. Therefore, the correct answer is 21.

Следи за CodeGalaxy

Мобильное приложение Beta

Get it on Google Play
Обратная Связь
Зарегистрируйся сейчас
или Подпишись на будущие тесты