Как посмотреть выведенный тип у вариативных шаблонов?

Имеется такая функция. Каким образом с помощью decltype или std::decay_t можно узнать тип параметра и использовать его в конструкции if constexpr например? Благодарю.

template<typename ...T>
bool implic(T... args) {
    return(args | ...);
}

Ответы (2 шт):

Автор решения: AR Hovsepyan
template<typename ...T>
bool implic(T... args) {
    if constexpr (!(std::is_integral_v<decltype(args)> && ...))
        return false;
    else
        return(args | ...);          
}

Такой пример подойдет?

→ Ссылка
Автор решения: user7860670

Чтобы узнать тип параметра его необходимо извлечь из пачки параметров T. Для этого можно воспользоваться кортежами из стандартной библиотеки:

#include <tuple>
#include <type_traits>
#include <cstddef>

template< typename ... T >
bool implic(T ... args)
{
    if constexpr
    (
        ::std::is_same_v
        <
            ::std::tuple_element_t< ::std::size_t{2}, ::std::tuple< T ... > >
        ,   int
        >
    )
    {
        // параметр с индексом 2 имеет тип int...
    }
    return (args | ...);
}

https://godbolt.org/z/hYx4Gn

→ Ссылка