Sono perplesso: dopo aver eseguito l'aggiornamento a GCC 6 (RC1), alcuni codice modello utilizzavano std::common_type
che funzionava prima che non funzionasse. Ho provato su clang, e anche questo fallisce ... quindi devo fare qualcosa di sbagliato!std :: common_type con riferimenti a type_info
Il codice pari a:
#include <type_traits>
#include <typeinfo>
using namespace std;
// common_type of two const type_info& is ok (compiles ok)
common_type<const type_info&, const type_info&>::type func1();
// common_type of three type_info& is bad...(fails to compile)
common_type<const type_info&, const type_info&, const type_info&>::type func2();
// common_type of two const int& is ok
common_type<const int&, const int&>::type func3();
// common_type of three const int& is ok too!
common_type<const int&, const int&, const int&>::type func4();
Il secondo common_type
con tre parametri di tipo std::type_info const &
fallisce la compilazione. clang suggerisce suggerentemente che uso un due argomenti std::common_type
, ma questo è in un modello di espansione in cui non posso controllare gli input!
Questo sembra molto strano: perché il caso const type_info&
con 3 non riesce, ma nessuno dell'altro tipo apparentemente equivalente fallisce?
vedere qui: https://godbolt.org/g/Ob4y0x
'common_type' ora decade e questo si traduce in cose" divertenti ". –
Alcuni riferimenti a Twitter mi indicano che 'std :: common_type' restituisce' std :: decay' del Ts ... che è super fastidioso per il mio caso d'uso ma spiega gli errori sopra. –
@MattG: È sempre possibile sostituire 'common_type_t' da common_type_t ...> ', quindi non dovrebbe essere super fastidioso. –