Здравствуйте, Kluev, Вы писали:
K>С вложенным классом Storage::Blob такой номер не пройдет т.к. в языке С++ нет механизма опережающих описаний. Это баг уровня языка который нужно исправлять. Как бы вы тут не распинались, что это и не нужно.
K>K>struct Storage::Blob;
K>void foo(Storage::Blob *blob);
K>
Правда что ли? Суждениями похож на любителя раста, те тоже рассуждают о том чего не знают.
// main_iface.h
#ifndef MAIN_IFACE_H
#define MAIN_IFACE_H
class storage {
public:
class blob;
};
storage::blob* make_blob();
int using_blob(storage::blob* b);
#endif /* MAIN_IFACE_H */
// main_impl.cpp
#include "main_iface.h"
class storage::blob {
public:
int finish() {
return 42;
}
};
storage::blob* make_blob() {
return new storage::blob();
}
int using_blob(storage::blob* b) {
return b->finish();
}
// main.cpp
#include "main_iface.h"
#include <iostream>
int main() {
std::cout << using_blob(make_blob()) << "\n";
return 0;
}
Собирается gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), С++98,
g++ main.cpp main_impl.cpp -o main
Может это баг уровня твоего знания С++?
ЗЫ: Про сырой указатель и мемлик знаю, это к вопросу о возможностях языка.