Вот из той же серии. Здесь аргумент b внутри функции является константным указателем, однако компилятор считает что константой является объект, на который он ссылается. И выдаёт ошибку не в том месте. Ошибка должна быть в строчке b=NULL;
class A { public: void f() { } }; template<typename T> void Func(const T b) { b=NULL; b.f(); // 'f' - call non-const method for constant object } void OnStart() { A a; Func(&a); };
Билд 1881. Баг компилятора: путает константность указателя с константностью объекта, на который он ссылается. Здесь переменная a - это не константа.
https://stackoverflow.com/questions/1143262/what-is-the-difference-between-const-int-const-int-const-and-int-const
- stackoverflow.com
class A { public: void f() { } }; template<typename T> void Func( T* const b ) { b=NULL; // 'b' - constant cannot be modified b.f(); } void OnStart() { A a; Func(&a); };
Подобная ошибка при компиляции
class A {}; template<typename T> void g1( T const ) {} //(1) template<typename T> void g2( T ) {} //(2) void OnStart() { A a; g1( &a ); //Error: 'g' - cannot to apply function template g2( &a ); //нормально };А какая принципиальная разница между g1 и g2?
Подобная ошибка при компиляции
А какая принципиальная разница между g1 и g2?const T и T const - принципиальная разница.
class A {}; template<typename T> void g1( T* const ) {} template<typename T> void g2( T* ) {}
насколько я помню в mql есть нюансы с константностью. могу ошибаться.
в с++ const T* === T const *
в mql const T* === T const * const
этот вопрос как-то всплывал где-то на форуме с ответом от разрабов
но судя по примерам дальше, есть еще нюансы в выведении типов в шаблонах
А какая принципиальная разница между g1 и g2?
никакой. бредовая ошибка
const T и T const - принципиальная разница.
А где Вы в моем примере увидели const T ??? Придумывать не нужно
Для чего нужно было писать const после T, а не до? Напишите ДО и будет пахать.
А если хотите после, тогда это имеет прямое отношение к указателю и, соответственно, ставьте звездочку после T.
Для чего нужно было писать const после T, а не до? Напишите ДО и будет пахать.
А если хотите после, тогда это имеет прямое отношение к указателю и, соответственно, ставьте звездочку после T.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Билд 1881. Баг компилятора: путает константность указателя с константностью объекта, на который он ссылается. Здесь переменная a - это не константа.