#include <iostream>
struct widget
{
struct baz { explicit baz() { std::cout << "constructor\n"; } };
static void baz() { std::cout << "function\n"; }
};
template<class B>
void foo() { typename B::baz(); }
template<class B>
void bar() { B::baz(); }
int main()
{
foo<widget>();
bar<widget>();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IHdpZGdldAp7CglzdHJ1Y3QgYmF6IHsgZXhwbGljaXQgYmF6KCkgeyBzdGQ6OmNvdXQgPDwgImNvbnN0cnVjdG9yXG4iOyB9IH07CglzdGF0aWMgdm9pZCBiYXooKSB7IHN0ZDo6Y291dCA8PCAiZnVuY3Rpb25cbiI7IH0KfTsKCnRlbXBsYXRlPGNsYXNzIEI+CnZvaWQgZm9vKCkgeyB0eXBlbmFtZSBCOjpiYXooKTsgfQoKdGVtcGxhdGU8Y2xhc3MgQj4Kdm9pZCBiYXIoKSB7IEI6OmJheigpOyB9CgppbnQgbWFpbigpCnsKCWZvbzx3aWRnZXQ+KCk7CgliYXI8d2lkZ2V0PigpOwp9