Можно ли записать в файл заголовка следующее:
inline void f () { std::function<void ()> func = [] {}; }
или
class C { std::function<void ()> func = [] {}; C () {} };
Я думаю, что в каждом исходном файле тип лямбда может быть другим, и поэтому содержащийся в std::function
(target_type
результат будет отличаться) будет отличаться.
Является ли это ODR (одним правилом определения), несмотря на то, что он выглядит как общий шаблон и разумная вещь? Второй образец нарушает ODR каждый раз или только в том случае, если хотя бы один конструктор находится в файле заголовка?