#include <stdarg.h>
#include <stdio.h>

template<size_t N>
int test(int x1, ...)
{
    size_t n = N;
    va_list ap;
    va_start(ap, x1);

    printf("test<N>\n");

    int sum = x1;

    for(size_t i = 1; i < n; ++i)
        sum += va_arg(ap, int);

    va_end(ap);

    return sum;
}

template<>
int test<3U>(int x1, ...)
{
    size_t n = 3U;
    va_list ap;
    va_start(ap, x1);

    printf("test<3>\n");

    int sum = x1;

    for(size_t i = 1; i < n; ++i)
        sum += va_arg(ap, int);

    va_end(ap);

    return sum;
}

int main()
{
    const int t2 = test<2>(1, 2);
    printf("%d\n", t2);

    const int t3 = test<3>(1, 2, 3);
    printf("%d\n", t3);

    return 0;
}


