Адрес стандартной функции
От: Alexander G Украина  
Дата: 26.10.09 12:26
Оценка:
Случайно заметил здесь

it is illegal to take the address of a function in the standard library


Это как, ниже приведенный код уже не только непортабелен, но и нелегален ?
std::vector<int> v;
generate_n(std::back_inserter(v), 10, rand);
Русский военный корабль идёт ко дну!
Re: Адрес стандартной функции
От: remark Россия http://www.1024cores.net/
Дата: 26.10.09 13:07
Оценка: 1 (1)
Здравствуйте, Alexander G, Вы писали:

AG>Случайно заметил здесь


AG>

AG>it is illegal to take the address of a function in the standard library


AG>Это как, ниже приведенный код уже не только непортабелен, но и нелегален ?

AG>
AG>std::vector<int> v;
AG>generate_n(std::back_inserter(v), 10, rand);
AG>



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


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[2]: Адрес стандартной функции
От: Alexander G Украина  
Дата: 26.10.09 13:18
Оценка:
Здравствуйте, remark, Вы писали:


R>У стандартных функций сигнатуры не фиксированы, поэтому брать их адреса смысла мало.


R>Там фиксируется только "форма вызова", поэтому реализация вольна добавлять дополнительные параметры со значениями по-умолчанию, или объединять несколько функций в одну и т.д.


R>



Не фиксированы означает зависящие от реализации. Я понимаю "it is illegal" как undefined behaviour, а не непереносимый код, поэтому и интересуюсь, есть ли более явные запреты взятия адреса.
Русский военный корабль идёт ко дну!
Re[2]: Адрес стандартной функции
От: Юрий Жмеренецкий ICQ 380412032
Дата: 27.10.09 02:46
Оценка: 10 (2) +1
Здравствуйте, remark, Вы писали:


R>У стандартных функций сигнатуры не фиксированы, поэтому брать их адреса смысла мало.

R>Там фиксируется только "форма вызова", поэтому реализация вольна добавлять дополнительные параметры со значениями по-умолчанию, или объединять несколько функций в одну и т.д.

Это справедливо только для member functions и не распростроняется на virtual/global/non-member (17.4.4.4/2). Плюс 17.4.4.3/3:

A global or non-member function cannot be declared by the implementation as taking additional default arguments.

Re: Адрес стандартной функции
От: gear nuke  
Дата: 27.10.09 12:12
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>

AG>it is illegal to take the address of a function in the standard library


У Саттера это зувучит так

Use Pointers To Member Functions With Anything, Except the Standard Library

здесь
.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[2]: Адрес стандартной функции
От: Alexander G Украина  
Дата: 27.10.09 12:19
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Здравствуйте, Alexander G, Вы писали:


AG>>

AG>>it is illegal to take the address of a function in the standard library


GN>У Саттера это зувучит так

GN>

Use Pointers To Member Functions With Anything, Except the Standard Library

GN>здесь

Эта формулировка понятна и вопросов не вызывает.

Я не понимаю, что хотели сказать процитированной мной формулировкой.
Русский военный корабль идёт ко дну!
Re: Да, это неверная формулировка (-)
От: Alexander G Украина  
Дата: 29.10.09 10:25
Оценка:
AG>Случайно заметил здесь

AG>

AG>it is illegal to take the address of a function in the standard library


Да, это неверная формулировка.
Русский военный корабль идёт ко дну!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.