Возможно ли статически напечатать аргументы, заданные std::bind
? Я испытываю искушение использовать его, но это позволяет мне с чем угодно; например, std::bind(1,2);
принимается. В качестве альтернативы я мог бы свернуть свое собственное решение, используя std::result_of
.Может ли std :: bind быть проверен во время компиляции?
ответ
Я еще не уверен, может ли быть сделано bind
, чтобы надежно отвергнуть такие конструкции или нет. Но если это возможно, то это будет расширение.
Статья Requires
в стандарте сообщает клиенту, что он должен делать, чтобы избежать неопределенного поведения. Это не говорит поставщику, что он должен делать, чтобы соответствовать. Таким образом, std::bind(1,2)
- это неопределенное поведение. Он мог сделать что угодно. Причинение ошибки времени компиляции было бы хорошим неопределенным поведением, но не обязательным.
О! Это хорошо знать. Я думал, что «Требовать» означает требование для реализации. – Xeo
@Howard Hinnant: Кажется, GCC 4.7.0 (20120128) теперь отклоняет 'std :: bind (1,2)'; хотя он принимает функции рядом с слишком небольшим количеством аргументов (хотя нулевые аргументы дают ошибку). Как вы уже описали, один поставщик компилятора может определить «привязку» одним способом, а другой - другим. Благодарю. – user2023370
- 1. C++: Может ли виртуальное наследование быть обнаружено во время компиляции?
- 2. Может ли гарантированный UB быть отклонен во время компиляции?
- 3. Может ли C сортировать во время компиляции?
- 4. Инициализация C++ std :: bitset во время компиляции
- 5. Использование std :: bind в std :: bind: ошибка компиляции (неявный листинг)
- 6. Почему std :: bind может быть назначен аргумент-несоответствующий std :: function?
- 7. catch std :: назначение функций во время компиляции
- 8. Подтвердить содержимое std :: initializer_list во время компиляции
- 9. Может ли переупорядочение памяти во время компиляции привести к взаимоблокировкам?
- 10. Можно ли индексировать массивы во время компиляции?
- 11. Может быть проверен сценарий DSL
- 12. Как время компиляции может быть (экспоненциально) быстрее, чем время выполнения?
- 13. std :: tr1 :: bind() несколько ошибок компиляции
- 14. std :: коэффициент мощности std :: ratio во время компиляции?
- 15. Во время компиляции QMainWindow не может быть найден
- 16. Как тип объекта может быть неизвестен во время компиляции?
- 17. Почему std :: bind не может быть параметром пакета параметров?
- 18. Возможно ли прочитать файл во время компиляции?
- 19. Parameter.GetType() - Должен ли быть известен тип во время компиляции?
- 20. std :: элемент класса класса, заданный во время компиляции?
- 21. Может ли AppHarbor установить условный символ компиляции во время сборки?
- 22. может # + BIND: быть обернутым?
- 23. Может ли оценка функций выполняться во время компиляции?
- 24. Может ли переназначение std :: map во время вызова функции const?
- 25. Может ли `constexpr std :: initializer_list` использоваться во время компиляции, но не ODR?
- 26. Определить выполнение `constexpr` - во время компиляции или во время выполнения?
- 27. Получение числа элементов в std :: array во время компиляции
- 28. Почему `boost :: bind()` не может быть заменен на `std :: bind()` здесь?
- 29. Инициализация синглтона во время компиляции
- 30. Как узнать размер std :: bitset во время компиляции
Я получаю для: '{auto x = std :: bind (1,2); } error: нет соответствующей функции для вызова 'bind (int, int)', вы уверены, что используете ее надлежащую реализацию? Многие вещи не проверяются до тех пор, пока не будет использован «op()» (поскольку он использует шаблоны). Но он не должен принимать вещи, которые обычный вызов функции не принимал бы. – PlasmaHH
@PlasmaHH: Какую реализацию вы используете? GCC 4.5.1 и libC++ TOT принимают это. – Xeo
Я использую GCC 4.5.3. 'auto qq = std :: bind (1,2);' не дает мне никакой ошибки. – user2023370