Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Kastaneda
Jesus loves me
Эксперт С++
4756 / 2960 / 243
Регистрация: 12.12.2009
Сообщений: 7,516
Записей в блоге: 2
Завершенные тесты: 1
#1

Соответствует ли код стандарту? - C++

15.02.2013, 10:11. Просмотров 1166. Ответов 17
Метки нет (Все метки)

Привет!
Имеется следующий код (в очень урощенном виде)
C++
1
2
3
4
5
6
7
8
9
10
11
12
struct foo {};
 
int main()
{
  struct foo {};
 
  void f() throw (foo);
  
  return 0;
}
 
void f() throw (foo) {}
g++ и clang его компилируют, а компилятор Intel выдает следующее
Bash
1
2
3
4
5
6
7
8
Compilation finished with errors:
source.cpp(12): error: exception specification is incompatible with that of previous function "f" (declared at line 7):
            previously omitted: "foo"
            previously specified but omitted here: "foo"
  void f() throw (foo) {}
           ^
 
compilation aborted for source.cpp (code 2)
со своим английским не смог найти в стандарте информацию конкретно по этому вопросу.
Хотелось бы услышать ваши мысли по этому поводу.

Добавлено через 19 часов 43 минуты
и еще вот
C++
1
2
3
4
5
6
7
8
9
class A {};
class : public A {
};
 
 
int main()
{
   return 0;
}
g++ и clang не компилируют (error: abstract declarator ‘<anonymous class>’ used as declaration), а Intel выдает варнинг
Bash
1
2
source.cpp(4): warning #64: declaration does not declare anything
  class : public A {
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2013, 10:11
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Соответствует ли код стандарту? (C++):

Число 65,41 представлено у форматі чисел із плаваючою крапкою стандарту IEEE 754 з одинарною точністю - C++
Число 65,41 представлено у форматі чисел із плаваючою крапкою стандарту IEEE 754 з одинарною точністю. Наведіть двійкове подання експоненти...

Сконвертировать простую математическую формулу по стандарту С++ - C++ Builder
Здравствуйте господа.Имеется формула.Учитель мало объяснял как подробно преобразовать форму и каждый её компонент. Кто сможет...

Выделить подстроку, которая соответствует записи целого числа - C++ Builder
Я сделал прожку которая имеет комбобокс и едит , а что далее делать еще не знаю, подскажите что делать дальше ? Задание : Дана строка,...

Выделить подстроку, которая соответствует записи целого числа - C++ Builder
В оконном приложении исходные данные вводить из компонентa Edit в ListBox(заканчивать нажатием Enter).Скалярный результат выводить в...

Ширина поля StringGrid не соответствует ширине столбца в Excel - C++ Builder
Здравствуйте!!! Давно хотел задать этот вопрос. Скажите кто-нить заметил разницу, кто занимался хоть раз программно создавать отчёт в...

Выделить подстроку, которая соответствует записи вещественного числа с фиксированной точкой - C++ Builder
Дана строка символов, состоящая из букв, цифр, запятых, точек, знаков “+” и “-“. Выделить подстроку, которая соответствует записи...

17
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
18.02.2013, 13:21 #2
C++
1
2
A class-specifier whose class-head omits the class-head-name defines an unnamed class. [ Note: An
unnamed class thus can’t be final. — end note ]
Впринципе единственное существенное по второму вопросу... Мне что-то подсказывает, что unnamed класс не создавая сразу же объект данного класса объявить нельзя.

Первый вопрос:
An exception-specification shall appear only on a function declarator for a function type, pointer to function
type, reference to function type, or pointer to member function type that is the top-level type of a declaration
or definition, or on such a type appearing as a parameter or return type in a function declarator.
Так-то декларация у нас в main-е, следовательно там нужен exception specification, а вот в реализации пофиг уже на него.
Хотя вот чуть дальше есть такое:
If any declaration of a function has an exception-specification that is not a noexcept-specification allowing
all exceptions, all declarations, including the definition and any explicit specialization, of that function shall have a compatible exception-specification.
Если поменять пример (перенести декларацию foo из мейна, то gcc/clang начинают ворнить на эту тему, что логично, судя по данному параграфу)... Попробую понять почему при локальной декларации все ок...
1
Kastaneda
Jesus loves me
Эксперт С++
4756 / 2960 / 243
Регистрация: 12.12.2009
Сообщений: 7,516
Записей в блоге: 2
Завершенные тесты: 1
18.02.2013, 14:19  [ТС] #3
Цитата Сообщение от ForEveR Посмотреть сообщение
Мне что-то подсказывает, что unnamed класс не создавая сразу же объект данного класса объявить нельзя.
Вот мне тоже что-то подсказывает, но в стандарте не смог это найти, более того я вообще не смог найти словосочетание "anonymous class" (почему anonymous а не unnamed? потому что говоря например про union в стандарте используется именно anonymous)
0
Somebody
2799 / 1610 / 150
Регистрация: 03.12.2007
Сообщений: 4,210
Завершенные тесты: 3
18.02.2013, 17:35 #4
Про второму вопросу:
http://stackoverflow.com/questions/3607177/unnamed-classes
2
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
19.02.2013, 09:26 #5
Я капитально заинтересовался первым вопросом, что-то мне подсказывает, что это баг, но увидим. В любом случае:
http://stackoverflow.com/questions/1...realisation-of
2
Kastaneda
Jesus loves me
Эксперт С++
4756 / 2960 / 243
Регистрация: 12.12.2009
Сообщений: 7,516
Записей в блоге: 2
Завершенные тесты: 1
19.02.2013, 10:23  [ТС] #6
Somebody, не совсем понял суть написанного по ссылке, можешь пояснить?
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
19.02.2013, 11:00 #7
In such
cases, and except for the declaration of an unnamed bit-field (9.6), the decl-specifier-seq shall introduce one
or more names into the program, or shall redeclare a name introduced by a previous declaration. [ Example:
C++
1
2
enum { }; // ill-formed
typedef class { }; //ill-formed
simple-declaration:
decl-specifier-seqopt init-declarator-listopt ;

decl-specifier:
storage-class-specifier
type-specifier

type-specifier:
trailing-type-specifier
class-specifier
enum-specifier

class-specifier:
class-head { member-specificationopt }

class-head:
class-key attribute-specifier-seqopt class-head-name class-virt-specifieropt base-clauseopt
class-key attribute-specifier-seqopt base-clauseopt

class-head-name:
nested-name-specifieropt class-name
Таким образом, если используется simple-declaration, декларация, ежели она не является bit-field должна вводить/переопределять некое имя в программу.
1
Somebody
2799 / 1610 / 150
Регистрация: 03.12.2007
Сообщений: 4,210
Завершенные тесты: 3
19.02.2013, 11:55 #8
Кстати, enum {}; g++ переваривает даже без warning'а.
Меня заинтересовал пример
C++
1
typedef class qq {};
Если я правильно понял, typedef, как decl-specifier, тут не мешает, хотя и не имеет смысла?
0
Kastaneda
Jesus loves me
Эксперт С++
4756 / 2960 / 243
Регистрация: 12.12.2009
Сообщений: 7,516
Записей в блоге: 2
Завершенные тесты: 1
19.02.2013, 11:57  [ТС] #9
ForEveR, т.е. Intel компилятор в данном случае неправ? Или частично неправ?

Добавлено через 1 минуту
Цитата Сообщение от Somebody Посмотреть сообщение
Кстати, enum {}; g++ переваривает даже без warning'а.
anonymous union как раз разрешены стандартом (да и частенько так и используются).
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
19.02.2013, 11:59 #10
Kastaneda, http://software.intel.com/en-us/arti...s-union-fields
0
Kastaneda
Jesus loves me
Эксперт С++
4756 / 2960 / 243
Регистрация: 12.12.2009
Сообщений: 7,516
Записей в блоге: 2
Завершенные тесты: 1
19.02.2013, 11:59  [ТС] #11
Цитата Сообщение от Somebody Посмотреть сообщение
Если я правильно понял, typedef, как decl-specifier, тут не мешает, хотя и не имеет смысла?
Ну да, синтаксически валидная конструкция, но смысла нет.
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
19.02.2013, 11:59 #12
Kastaneda, anonymous union и unnamed enum это как бэ разные вещи, не?
Не тему gcc и unnamed enum: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54216
1
Kastaneda
Jesus loves me
Эксперт С++
4756 / 2960 / 243
Регистрация: 12.12.2009
Сообщений: 7,516
Записей в блоге: 2
Завершенные тесты: 1
19.02.2013, 12:10  [ТС] #13

Не по теме:

Цитата Сообщение от ForEveR Посмотреть сообщение
Kastaneda, anonymous union и unnamed enum это как бэ разные вещи, не?
блиин, да, гоню я)



Добавлено через 6 минут
Хм, вот что интересно, вот это компилится в gcc
C++
1
2
3
4
struct N { 
   struct { // Nonstandard anonymous union. 
   }; 
 };
а вот это нет
C++
1
2
class {
};
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
19.02.2013, 12:14 #14
Kastaneda, Ага. Только что читал про это. http://gcc.gnu.org/onlinedocs/gcc/Unnamed-Fields.html#Unnamed-Fields

Добавлено через 42 секунды
Bash
1
2
forever@pterois:~/My_pro1/cpp_pro$ g++ -o new new.cpp -Wall -pedantic
new.cpp:1:20: предупреждение: в ISO C++ анонимные структуры запрещены [-pedantic]
0
Kastaneda
Jesus loves me
Эксперт С++
4756 / 2960 / 243
Регистрация: 12.12.2009
Сообщений: 7,516
Записей в блоге: 2
Завершенные тесты: 1
19.02.2013, 13:20  [ТС] #15
Ну хоть что-то прояснилось) Да я тут regression testsuite для компилятора ваяю, иногда натыкаюсь на интересные вещи, типа этого.
0
19.02.2013, 13:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2013, 13:20
Привет! Вот еще темы с ответами:

Выделить из CString подстроку соответствует записи числа с плавающей точкой - Visual C++
Всем привет. Мне нужно создать MFC приложение которое из введенной строки состоящей из букв, цифр, запятых, точек, знаков ”+” и ”-”...

Соответствует ли это стандарту С? - C (СИ)
В Visual Studio и в CodeBlocks такой код компилируется с предупреждением. #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; void f(int *p) ...

какому стандарту С++ соответствует minGW - Кроссплатформенная разработка
Здравствуйте! У меня возникла такая проблема: я сейчас изучаю С++ и компилирую программы с помощью компилятора minGW. В книге дошел до...

насколько это соответствует стандарту? - C++
#include &lt;iostream&gt; class shit { private: int x; public: shit(){} shit(int p) { x = p; } void set (int*...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru