Утечка локального класса за пределы функции

#c #local-class

Вопрос:

У меня есть функция с именем return_local , в которой она возвращает экземпляр локального класса, заключенный в лямбду.

 auto return_local() {
  return [] {
    static int sample { 5 };
    struct Point {
      int x, y;
      int show_sample() { return sample; }
    };
    return Point {};
  }();
}
 
 using Point = decltype(return_local());
 

Теперь я могу использовать Point в качестве псевдонима с характеристиками локальных классов.

 Point p {.x = 4, .y = 1};
p.show_sample(); // returns 5
 

Является ли этот код нормальным? Есть ли какие-либо преимущества в использовании этого «просочившегося» класса?

Комментарии:

1. Вы можете это сделать, но непонятно, зачем вам это нужно. Почему бы просто не определить Point область пространства имен?

2. Это немного необычно, но код находится в пределах того, что я бы счел нормальным. Я не вижу никаких преимуществ в таком кодировании по сравнению с самостоятельным объявлением точки и тем, чтобы образец был статической переменной класса. Недостатком, как я вижу, является большая когнитивная нагрузка на техническое обслуживание.

3. Это иногда называют «Типом Волдеморта» (Тип, который не должен быть назван).