В проекте MSVC 2017 не может выбрать соответствующий оператор сравнения — говорит, что:
1>error C2593: 'operator <' is ambiguous
1>note: could be 'bool test::operator <(test::EntryType,test::EntryType)' [found using argument-dependent lookup]
1>note: or 'bool test::operator <(test::SomeInfo,test::SomeInfo)' [found using argument-dependent lookup]
note: while trying to match the argument list '(test::EntryType, test::EntryType)'
Попробовал сделать минимально повторяющий проблему тест на ideone — https://ideone.com/Avb8lQ
Тест — работает, в проекте — не работает. Вроде все один к одному перенес, даже ошибку в методе int compare( const StructTest s ) перенес — там должна быть ссылка.
В чем может быть проблема?
Вроде сигнатура первого оператора в точности соответствует тому, что он ищет. Ну, по крайней мере, если судить по сообщениям
UPD Попробовал на MSVC собрать приведенный пример — не собирвается. Получается, что есть какая-то проблема с MSVC 2017.
Здравствуйте, Marty, Вы писали:
M>В проекте MSVC 2017 не может выбрать соответствующий оператор сравнения — говорит, что:
M>
1>>error C2593: 'operator <' is ambiguous
1>>note: could be 'bool test::operator <(test::EntryType,test::EntryType)' [found using argument-dependent lookup]
1>>note: or 'bool test::operator <(test::SomeInfo,test::SomeInfo)' [found using argument-dependent lookup]
M>Попробовал сделать минимально повторяющий проблему тест на ideone — https://ideone.com/Avb8lQ M>В чем может быть проблема?
у тебя в проекте ошибка, и чтобы ее показать ты закинул на ideone работающий пример?
отличный план!
Здравствуйте, night beast, Вы писали:
NB>у тебя в проекте ошибка, и чтобы ее показать ты закинул на ideone работающий пример? NB>отличный план!
Ну, я попытался проиллюстрировать проблему, может там что-то может вылезти, о чем я не в курсе, но другие в курсе.
Или лучше было бы вообще без всякого примера пост запилить?
Здравствуйте, Marty, Вы писали:
NB>>у тебя в проекте ошибка, и чтобы ее показать ты закинул на ideone работающий пример? NB>>отличный план!
M>Ну, я попытался проиллюстрировать проблему, может там что-то может вылезти, о чем я не в курсе, но другие в курсе. M>Или лучше было бы вообще без всякого примера пост запилить?
имхо, в таком виде пример бесполезен
возможно, у тебя в проекте у этих классов есть конструкторы, или операторы преобразования в енум/инт, но без исходников это все чистая телепатия.
NB>имхо, в таком виде пример бесполезен NB>возможно, у тебя в проекте у этих классов есть конструкторы, или операторы преобразования в енум/инт, но без исходников это все чистая телепатия.
Нету. В структуре полей побольше, есть строки, и compare чутка посложнее. Еще есть метод toString, и всё. Конструкторов/деструкторов и операторов преобразования нету
Здравствуйте, Marty, Вы писали:
NB>>у тебя в проекте ошибка, и чтобы ее показать ты закинул на ideone работающий пример? NB>>отличный план!
M>Проверил на MSVC 2017 — то, что на ideone — в нем не работает
Здравствуйте, night beast, Вы писали:
NB>>>у тебя в проекте ошибка, и чтобы ее показать ты закинул на ideone работающий пример? NB>>>отличный план!
M>>Проверил на MSVC 2017 — то, что на ideone — в нем не работает
NB>у меня работает, на msvc что на https://gcc.godbolt.org тоже
Сорян, у меня в настройках стоит tooset v14 (MSVC 2015).
На готболте поставил его — работать перестало
M>>Сорян, у меня в настройках стоит tooset v14 (MSVC 2015). M>>На готболте поставил его — работать перестало
NB>если закоментировать все операторы сравнения, то компилирует нормально. NB>видимо, считает твой енум обычным интом.
Это без операторов видимо начинает его считать обычным интом. Я бы понял, если бы он с операторами дургого энама спутал, но у меня оператор для структуры. В общем, похоже глюк компилера
Здравствуйте, Marty, Вы писали:
NB>>если закоментировать все операторы сравнения, то компилирует нормально. NB>>видимо, считает твой енум обычным интом.
M>Это без операторов видимо начинает его считать обычным интом. Я бы понял, если бы он с операторами дургого энама спутал, но у меня оператор для структуры. В общем, похоже глюк компилера
твой оператор структуры вообще не при делах. закоментируй его, ошибка останется.
M>>Это без операторов видимо начинает его считать обычным интом. Я бы понял, если бы он с операторами дургого энама спутал, но у меня оператор для структуры. В общем, похоже глюк компилера
NB>твой оператор структуры вообще не при делах. закоментируй его, ошибка останется.
Да, ты прав. Похоже неопределенность возникала со встроенным оператором для инта, но компилятор его стыдливо не показывал при выводе сообщения об ошибке