Баг компилятора: 'operator=' - structure have objects and cannot be copied

 

Билд 1881.  Баг компилятора.  Выдаёт ошибку, хотя явно задан оператор копирования.

void F()  
{   
  class A
  { 
    struct B
    {
      void* _ptr;
      void operator=(const B& obj) { _ptr= obj._ptr; }
    }; 
    B _b;
           
    void SomeMethod(B& b)  { b= _b; }  // 'operator=' - structure have objects and cannot be copied
  };
}

Причём если вынести класс A из функции F, то всё компилируется.

 
Где может быть полезно задание классов и структур в чьих-то потрохах?
 
Если структуры и классы предназначены для локального одноразового применения, то удобней их размещать непосредственно по месту использования, чем размазывать код и захламлять пространство имён.
 
fxsaber:
Где может быть полезно задание классов и структур в чьих-то потрохах?

Например здесь:

#include <Math\Stat\Math.mqh>
struct S {}; //Error: 'S' - identifier already used
void OnStart() {}

ошибка при компиляции, а так:

#include <Math\Stat\Math.mqh>
void OnStart()
{
struct S {}; //нормально
}
нормально
 
A100:

Например здесь:

ошибка при компиляции, а так:

нормально

Да уж, это жесть конечно.  S - это ж просто локальная переменная.  Я даже и не в курсе был, что до такой степени всё печально )     С названиями классов приходилось выкручиваться через дефайны, а оказывается ещё и с локальными переменными надо помучаться )   И вот как в таком хаосе работать...

Я уже неоднократно предлагал разработчикам ввести наконец namespace, но там всё глухо как в танке.

 
Alexey Navoykov:

Да уж, это жесть конечно.  S - это ж просто локальная переменная.  Я даже и не в курсе был, что до такой степени всё печально )     С названиями классов приходилось выкручиваться через дефайны, а оказывается ещё и с локальными переменными надо помучаться )   И вот как в таком хаосе работать...

Хаоса не ощущаю. Наверное, примитивно пишу.

 
fxsaber:

Хаоса не ощущаю. Наверное, примитивно пишу.

Это до поры до времени. Когда всё свалено в одну кучу, то крах неизбежен )  Захотите подключить чью-то библиотеку, а тут окажется что её автор пишет так же "примитивно" как и вы, используя такие же имена классов и функций.
 
Alexey Navoykov:
Это до поры до времени. Когда всё свалено в одну кучу, то крах неизбежен )  Захотите подключить чью-то библиотеку, а тут окажется что автор пишет так же "примитивно" как и вы, используя такие же имена классов и функций.

Макросами прибью.

 
fxsaber:

Макросами прибью.

Ну.. не все такие спецы в макросах как fxsaber.. ))
 
Кстати, мкл это не то место, где есть необходимость подключать чьи-то библиотеки. А если что-то и хочется дёрнуть для более быстрой реализации проекта, то всегда можно перелопатить чей-то код. Ну или хотя бы переименовать схожие функции по названиям.
 
Viktar Dzemikhau:
Кстати, мкл это не то место, где есть необходимость подключать чьи-то библиотеки.
Ну да, здесь суровые челябинские мужики заняты изобретением собственных велосипедов, кто во что горазд )