У меня есть переменная, определенная следующим образом
auto drum = std::make_tuple
( std::make_tuple
( 0.3f
, ExampleClass
, [](ExampleClass& instance) {return instance.eGetter ();}
)
);
Я ожидаю, что drum
будет кортежем кортежа. (т.е. ((a, b, c))
).
И у меня есть другая переменная, определенная следующим образом
auto base = std::make_tuple
( 0.48f
, ExampleClass
, [](ExampleClass& instance) {return instance.eGetter ();}
);
который я ожидаю, чтобы быть просто кортеж из трех элементов (то есть (a, b, c)
)
У меня также есть вектор, определенный следующим образом
std::vector<std::tuple<std::tuple< float
, ExampleClass
, std::function<float (ExampleClass&)>
>>> listOfInstruments;
Теперь, если я добавлю drum
в listOfInstruments
я не ожидаю ошибок.
Что действительно было в случае с listOfInstruments.push_back(drum);
Там, где я ожидал, была ошибка listOfInstuments.push_back(base);
но код компилируется просто отлично.
Поскольку listOfInstruments
имеет тип "кортеж из кортежей", разве добавление "кортежа" не должно вызывать какую-то ошибку? Если оба ()
и (())
не считаются одними и теми же типами в std::vector
. Или я совершенно не прав и тут что-то еще на работе?
Не могу понять это.