C ++: список инициализаторов + шаблон выдает странную ошибку

Рассмотрим следующий код:

#include <initializer_list>

struct X{
static void init(const std::initializer_list<void*>& ptrs){}
};

template <typename T>
struct Y{

static void foo(){
X::init({ nullptr });
}

};

Функция foo шаблона класса Y<T> звонки X::init со списком инициализатора с одним nullptr, Должно работать нормально, не так ли?

Тем не менее, мой g ++ 4.6.1 жалуется:

test11.cpp: In static member function 'static void Y<T>::foo()':
test11.cpp:12:23: error: no matching function for call to 'X::init(<brace-enclosed initializer list>&)'
test11.cpp:12:23: note: candidate is:
test11.cpp:5:15: note: static void X::init(const std::initializer_list<void*>&)
test11.cpp:5:15: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'const std::initializer_list<void*>&'

Как только я удаляю параметр шаблона из Yто есть сделай это нормальным классом, все отлично работает. Что я делаю не так или это ошибка компилятора?

2

Решение

Это почти наверняка ошибка компилятора, поскольку она работает в более поздних версиях GCC (см. Комментарии). Я лично не вижу причины, почему это не должно работать.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector