Я озадачен: при обновлении до GCC 6 (RC1) некоторый код шаблона с использованием std::common_type
, который работал до отказа. Я пробовал на clang, и это также терпит неудачу... поэтому я должен делать что-то неправильно!
Код составляет:
#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();
Второй common_type
с тремя параметрами типа std::type_info const &
не скомпилируется. clang cryptically предлагает использовать два аргумента std::common_type
, но это в расширении шаблона, где я не могу управлять входами!
Это кажется очень странным: почему сбой const type_info&
с ошибкой 3, но не какой-либо другой, казалось бы, эквивалентный тип не работает?
Смотрите здесь: https://godbolt.org/g/Ob4y0x