Перегрузка методов используя ключевое слово volatile

Здрасьте. Изучаю многопоточное программирование и сейчас пытаюсь понять атомарность. В примере из книги за авторством Энтони Уильямса структура atomic_flag имеет 2 перегруженных метода.

bool test_and_set(memory_order _Order = memory_order_seq_cst) volatile noexcept; bool test_and_set(memory_order _Order = memory_order_seq_cst) noexcept; 

Я создал свою структуру и сделал такую-же перегрузку. Вот она

struct foo {     bool test() volatile noexcept { cout << "volatile"; return true; }     bool test() noexcept { cout << "No volatile"; return true; } }; 

При создании объекта и вызове метода test() нет никакой неоднозначности при вызове. Я не понимаю почему так происходит. Объясните пожалуйста

При вызове foo::test() в главном потоке в функции main вызывается метод без ключевого слова volatile.