Я работаю над шаблоном MyTemplate
, который будет использоваться следующим образом:
using Alias = MyTemplate<std::pair<int, char>,
std::pair<int, double>,
std::pair<int, unsigned int>>;
На данный момент мы можем предположить, что MyTemplate
будет принимать только список типов пар.Более того, все типы пар должны иметь один и тот же первый тип, а второй тип должен различаться.
Я хочу "поймать" пары "first_type
в MyTemplate
.Я придумал следующее определение:
template<typename... Ts>
struct MyTemplate
{
using first_type = std::decay_t<decltype((Ts::first_type, ...))>;
// ...
};
Когда я использую typename MyTemplate::first_type
в контексте другого шаблона, все работает нормально.Я получаю только предупреждение:
warning: left operand of comma operator has no effect [-Wunused-value]
using first_type = std::decay_t<decltype((Ts::first_type, ...))>;
^
Однако я не могу создать экземпляр Alias
, потому что я получаю эту ошибку:
error: missing 'typename' prior to dependent type name 'std::pair<int, char>::first_type'
Вы дали какую-либо идею для "общего" решения?Я могу использовать C + 17.