oui j'aime bien crier au loup avec "ouh la la bug incroyable du compilateur!!"

soit le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <cstdio>
 
template< typename T >
void do_work(const T& worker)
{
    worker();
}
 
int main(int argc, char *argv[])
{
    struct Worker
    {
        void operator()() const
        {
            printf("Hello World!\n");
        }
    };
    do_work(Worker());
}
ce code echoue sur gcc mingw 4.3.0
et compile parfaitement sur MSVC 8.0 et 9.0 (express si il faut)
ce qui déplait a GCC c'est la localité de la définition du type Worker, si on le met en dehors de main ca marche très bien.
Selon moi, c'est du caca, ca devrait marcher... a moins que quelqu'un me dise le contraire ? c'est bien un bug de GCC ? et si oui, quelels versions ? vous avez deja vu ca ? ou alors un bug de MSVC qui est trop laxiste?