Bonjour, ou bonsoir à tous, merci de vous attarder sur mon modeste message

Voila, je voudrais créer une fonction utilisant les template variadiques (parce que je le vaut bien, et que ça me fait bosser) prenant un pointeur sur une fonction en argument, plus les arguments de la fonction en question.

Dans mon exemple (j'ai utilisé un namespace pour pouvoir avoir une utilisation ultérieure) j'ai la fonction chrono, qui renvoie un std::pair<int, typederetour> qui contient le temps d’exécution et la valeur de retour.

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
20
21
22
23
24
25
26
27
28
29
 
//chronoF.h
namespace chronoFonct{
    template<typename Ret, typename... Arg>
    std::pair<int, Ret> chrono(Ret(*fonct)(Arg...), Arg...); // = std::pair<temps, type de retour> chrono(fonction, arguments)
}
//chronoF.cpp
#include "chronoF.h"
 
namespace chronoFonct{
    template<typename Ret, typename... Arg>
    std::pair<int, Ret> chrono(Ret(*fonct)(Arg...), Arg... arguments){
          //...
    }
}
 
//main.cpp
 
#include "chronoF.h"
 
int boucle(bool, char, int){
    for(int i = 0; i < 1000; ++i);
    return 1;
}
 
int main(){
    std::pair<int, int> a = chronoFonct::chrono(boucle, true, 'a', 1);
    return 0;
}
Hors, il y a un os... Voici l'insulte de mon compilo

undefined reference to `std::pair<int, int> chronoFonct::chrono<int, bool, char, int>(int (*)(bool, char, int), bool, char, int)'
voila, je compille avec l'option -std=c++11, et avec mingw

Si vous savez pourquoi cette erreur, vous serez gentil de m'aider...

Merci d'avance