Я не уверен, является ли это ошибкой компилятора, или я сделал что-то, что идет вразрез со стандартом, чтобы вызвать неопределенное поведение.Вот мой код:
#include <iostream>
template<auto InputSize, typename SizeType = decltype(InputSize)>
class StaticArray
{
public:
using size_type = SizeType;
using size_type2 = decltype(InputSize);
};
int main()
{
//StaticArray<2, int> s1;
StaticArray<2ull, int> s3;
std::cout << typeid(decltype(s3)::size_type).name() << "\t" << typeid(decltype(s3)::size_type2).name() << "\n";
return 0;
}
Если закомментированная строка остается закомментированной, я получаю правильный вывод: int unsigned __int64
.Однако, если я раскомментирую строку, я получу вывод int int
.Для справки я собираю это в отладке x86, на MSVC 2017 v15.9.2.