Я пытаюсь инициализировать std::unordered_map
, используя конструктор, который принимает данные через список инициализации и начальное количество сегментов.
По какой-то причине этот конструктор работает, если я помещаю его в main
, но имеет синтаксическую ошибку, когда я помещаю его в заголовок класса.
В частности, заголовок, называемый momo.h
:
#pragma once
#include <unordered_map>
namespace std
{
template <>
struct hash<std::pair<uint16_t, uint16_t>>
{
std::size_t operator()(const std::pair<uint16_t, uint16_t>& k) const
{
return (std::hash<long>()((((long)k.first) << 16) + (long)k.second));
}
};
}
class test
{
std::unordered_map<std::pair<uint16_t, uint16_t>, uint16_t> m_Z(
{ /* Fails here: syntax error: missing ')' before '{' */
{std::pair{ 1, 2 }, 3},
{std::pair{ 4, 5 }, 6}
}, 128);
};
Пока я удаляю определение из заголовка в main
, таким образом:
#include "Momo.h"
int main()
{
test X;
std::unordered_map<std::pair<uint16_t, uint16_t>, uint16_t> Y(
{
{std::pair{ 1, 2 }, 3},
{std::pair{ 4, 5 }, 6}
}, 128);
}
Код компилируется без ошибок. Почему?