double operator()(double) const
// 2/ (see below)
// 1/ (see below)
std::thread t1 (one_filter.operator());
std::thread t2 (one_filter.operator());
operator() is executed twice in parallel on the very same filter object.
For data accessed in operator(), that means :
1/ member data held by filter structure are shared among two calls and should be thread safe.
2/ local variables declared in operator() are not shared and require no thread safety.
It's your responsibility to make operator() thread-safe, and I didn't see any discrepancies, just a different emphasis. Well, I wouldn't have written "require no thread safety"...