Вызов функции-члена, перегруженной ref-квалификаторами, неоднозначен ⇐ C++
Вызов функции-члена, перегруженной ref-квалификаторами, неоднозначен
Я обнаружил странное поведение при компиляции моего кода с помощью G++ (gcc 4.8.1 и MinGW 4.8.2 с -std=gnu++1y флаг). В духе SSCCE я выделил следующий фрагмент:
структура C { шаблон авто f(X &&) const & { ; } шаблон авто f(X &&) & { ; } шаблон авто f(X &&) && { ; } }; интервал основной() { интервал я {}; #если 1 C{}.f(я); #endif #если 1 С с {}; ср. (я); #endif вернуть 0; } Выдает ошибку:
main.cpp: В функции int main(): main.cpp:29:10: ошибка: вызов перегруженного 'f(int&)' неоднозначен ср. (я); ^ main.cpp:29:10: примечание: кандидаты: main.cpp:6:5: примечание: auto C::f(X&&) const & [с X = int&] f(X &&) const & ^ main.cpp:11:5: примечание: auto C::f(X&&) & [с X = int&] f(X &&) & ^ main.cpp:16:5: примечание: auto C::f(X&&) && [с X = int&] f(X &&) && ^ Но в случае #if 1 и #if 0 или #if 0 и #if 1 > компилируется нормально. Кроме того, если я заменю все auto на void, то все также успешно скомпилируется.
Это ошибка или я просто ввожу в заблуждение?
Я обнаружил странное поведение при компиляции моего кода с помощью G++ (gcc 4.8.1 и MinGW 4.8.2 с -std=gnu++1y флаг). В духе SSCCE я выделил следующий фрагмент:
структура C { шаблон авто f(X &&) const & { ; } шаблон авто f(X &&) & { ; } шаблон авто f(X &&) && { ; } }; интервал основной() { интервал я {}; #если 1 C{}.f(я); #endif #если 1 С с {}; ср. (я); #endif вернуть 0; } Выдает ошибку:
main.cpp: В функции int main(): main.cpp:29:10: ошибка: вызов перегруженного 'f(int&)' неоднозначен ср. (я); ^ main.cpp:29:10: примечание: кандидаты: main.cpp:6:5: примечание: auto C::f(X&&) const & [с X = int&] f(X &&) const & ^ main.cpp:11:5: примечание: auto C::f(X&&) & [с X = int&] f(X &&) & ^ main.cpp:16:5: примечание: auto C::f(X&&) && [с X = int&] f(X &&) && ^ Но в случае #if 1 и #if 0 или #if 0 и #if 1 > компилируется нормально. Кроме того, если я заменю все auto на void, то все также успешно скомпилируется.
Это ошибка или я просто ввожу в заблуждение?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение