#include <iostream>
#include <memory>
class Base
{
public:
Base() {}
};
class Derived : public Base
{
public:
Derived() {}
Derived(std::initializer_list<std::pair<int, std::shared_ptr<Base>>>) {}
};
int main(int argc, char ** argv)
{
auto example = new Derived({
{ 0, std::make_shared<Derived>() }
});
return 0;
}
Он работает (live preview), но когда я пытаюсь использовать std::make_shared
с аргументом std::initializer_list
в качестве аргумента, я получил ошибки:
auto example = new Derived({
{ 0, std::make_shared<Derived>({
{ 0, std::make_shared<Derived>() }
}) }
});
Как вы можете видеть здесь на предварительном просмотре в прямом эфире.
error: слишком много аргументов для функции...
Работает только тогда, когда я делаю это (предварительный просмотр в прямом эфире):
auto example = new Derived({
{ 0, std::make_shared<Derived>(std::initializer_list<std::pair<int, std::shared_ptr<Base>>> {
{ 0, std::make_shared<Derived>() }
}) }
});
Я хочу знать: почему он работает только тогда, когда я передаю std::initializer_list
как аргумент std::make_shared
вместо использования {{}}
следующим образом:
auto example = new Derived({ { 0, std::make_shared<Base>() } });
Можно ли принять std::make_shared
его?
Спасибо заранее.