Является ли это gcc слишком приятным и делает то, что разработчик считает, что это будет делать, или clang, чрезмерно суетливый. Я пропускаю некоторые тонкие правила в стандарте, где лязг на самом деле правильно жаловаться на этоClang: error: недействительное использование нестатического элемента данных
Или я должен использовать второй бит кода, который является в основном, как offsetof работает
[[email protected] ~]$ g++ -Wall -pedantic -ansi a.cc
[[email protected] ~]$ a.out
50
[[email protected] ~]$ cat a.cc
#include <iostream>
struct Foo
{
char name[50];
};
int main(int argc, char *argv[])
{
std::cout << sizeof(Foo::name) << std::endl;
return 0;
}
[[email protected] ~]$ clang++ a.cc
a.cc:10:29: error: invalid use of non-static data member 'name'
std::cout << sizeof(Foo::name) << std::endl;
~~~~~^~~~
1 error generated.
[[email protected] ~]$ g++ -Wall -pedantic -ansi b.cc
[[email protected] ~]$ a.out
50
[[email protected] ~]$ cat b.cc
#include <iostream>
struct Foo
{
char name[50];
};
int main(int argc, char *argv[])
{
std::cout << sizeof(static_cast<Foo*>(0)->name) << std::endl;
return 0;
}
[[email protected] ~]$ clang++ b.cc
[[email protected] ~]$ a.out
50
Ну, я обнаружил, что добавление -std = C++ 11 перестает жаловаться. Итак, теперь я задаюсь вопросом, какая часть для C++ 98 я нарушаю с этим кодом. Gcc в порядке с ним в любой версии, но это не значит, что я не нарушил правило. – Adrian
Не расширяйте свой вопрос, добавляя комментарии. Либо ответьте на свой вопрос, примите его, задайте новый вопрос. Или отредактируйте свой вопрос, включая заголовок и удаление ненужных частей. – usr1234567