Я все еще новичок в C ++ 11 хранилище thread_local.В частности, мне любопытно узнать следующий код:
class foo_t
{
foo_t() { std::cout << "Foo ctor"; }
~foo_t() { std::cout << "Foo dtor"; }
}
thread_local foo_t foo;
void bar() { }
void baz() { }
int main()
{
std::thread t1(bar), t2(baz);
t1.join(); t2.join();
}
Будет ли дважды вызываться ctor / dtor foo_t
в этом примере (я имею в виду, требует ли этого стандарт)?Что если я переместу bar
в другой переводчик?Что если такой блок не будет иметь декларации foo_t
или foo
?