Clang e as expressões de dobra binária - A maldição do pacote de parâmetros vazio

Especificamente Clang 3.6.0, atualmente hospedado por Coliru.

Todos esses snippets são chamados de:

int main() {
    foo();
    std::cout << "\n----\n";
    foo(1, 2, 3);
}

O código a seguir:

template <class... Args>
void foo(Args... args) {
    std::cout << ... << args;
}

Dispara o seguinte erro de compilação:

main.cpp:7:17: error: expected ';' after expression
    std::cout << ... << args;
                ^
                ;
main.cpp:7:15: error: expected expression
    std::cout << ... << args;
              ^

Então, tentei colocar parênteses em torno da expressão:

(std::cout << ... << args);

Funciona, mas dispara um aviso:

main.cpp:7:6: warning: expression result unused [-Wunused-value]
    (std::cout << ... << args);
     ^~~~~~~~~
main.cpp:11:5: note: in instantiation of function template specialization 'foo<>' requested here
    foo();
    ^

Então, tentei descartar o valor da expressão com uma conversão no estilo de função paravoid :

void(std::cout << ... << args);

Mas :

main.cpp:7:20: error: expected ')'
    void(std::cout << ... << args);
                   ^
main.cpp:7:9: note: to match this '('
    void(std::cout << ... << args);
        ^

Eu tentei umstatic_cast também, pelo mesmo resultado.

Então tentei com um elenco C:

(void)(std::cout << ... << args);

Mas então :

main.cpp:6:18: warning: unused parameter 'args' [-Wunused-parameter]
void foo(Args... args) {
                 ^

... e minha saída é apenas---- : foo(1, 2, 3); não sai mais!

Clang é amaldiçoado por uma força maligna a partir de padrões futuros, tem um bug ou o problema está sentado na minha cadeira agora?

questionAnswers(3)

yourAnswerToTheQuestion