Bonjour,

J'ai cette erreur en incluant Ogre.h.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
Dans le fichier inclus depuis /usr/include/c++/12/thread:43,
                 depuis [..]/Ma/code/modules/ma/ogre/include/Ogre/Ogre.h:14,
                 depuis [..]/Ma/code/modules/ma/ogre/src/View.cpp:14:
/usr/include/c++/12/bits/std_thread.h: Dans le constructeur «*std::thread::thread(_Callable&&, _Args&& ...)*»:
/usr/include/c++/12/bits/std_thread.h:165:13: erreur: ne peut convertir «*int*» en «*void (*)()165 |             __depend);
      |             ^~~~~~~~
      |             |
      |             int
J'utilise gcc 12.3.0 et je compile mon code avec la norme c++17.

J'ai dû mal à savoir par quel bout prendre cette erreur.
J'ai l'impression que cette erreur est apparue quand le système est passé à gcc 12 mais je n'en suis pas sûr et même si c'est vrais, je ne vois pas pourquoi l'inclusion de <thread> pourrait causer cette erreur.
J'ai l'impression qu'une option de compilation ou quelque chose d'autre en amont a été déclaré et fait capoter l'inclusion de <thread>. Si c'est le cas, ça va être dur de trouver l'origine.

À noter que la compilation de la librairie d'Ogre ne pose aucun soucis.

Auriez-vous une idée par quel bout je dois commencer.

Merci

Voici le morceau de code qui génère cette erreur:
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
 
#ifdef _GLIBCXX_HAS_GTHREADS
    template<typename _Callable, typename... _Args,
	     typename = _Require<__not_same<_Callable>>>
      explicit
      thread(_Callable&& __f, _Args&&... __args)
      {
	static_assert( __is_invocable<typename decay<_Callable>::type,
				      typename decay<_Args>::type...>::value,
	  "std::thread arguments must be invocable after conversion to rvalues"
	  );
 
#ifdef GTHR_ACTIVE_PROXY
	// Create a reference to pthread_create, not just the gthr weak symbol.
	auto __depend = reinterpret_cast<void(*)()>(&pthread_create);
#else
	auto __depend = nullptr;
#endif
	using _Wrapper = _Call_wrapper<_Callable, _Args...>;
	// Create a call wrapper with DECAY_COPY(__f) as its target object
	// and DECAY_COPY(__args)... as its bound argument entities.
	_M_start_thread(_State_ptr(new _State_impl<_Wrapper>(
	      std::forward<_Callable>(__f), std::forward<_Args>(__args)...)),
	    __depend); /// <—————————————————————————————————L'erreur vient d'ici.
      }
#endif // _GLIBCXX_HAS_GTHREADS