No, it's just that the assembly output of godbolt happens before these optimization phases.
On my machine I get no unsigned instantiation, only the signed one :
$ objdump -D a.out | c++filt | grep foo
563: e8 21 01 00 00 callq 689 <bool foo<int>(int)>
56c: e8 18 01 00 00 callq 689 <bool foo<int>(int)>
0000000000000689 <bool foo<int>(int)>:
and the main :
0000000000000560 <main>:
560: 53 push %rbx
561: 31 ff xor %edi,%edi
563: e8 21 01 00 00 callq 689 <bool foo<int>(int)>
568: 31 ff xor %edi,%edi
56a: 89 c3 mov %eax,%ebx
56c: e8 18 01 00 00 callq 689 <bool foo<int>(int)>
571: 0f b6 d3 movzbl %bl,%edx
574: 48 8d 3d b1 01 00 00 lea 0x1b1(%rip),%rdi # 72c <_IO_stdin_used+0x4>
57b: 0f b6 f0 movzbl %al,%esi
57e: 31 c0 xor %eax,%eax
580: e8 cb ff ff ff callq 550 <printf@plt>
585: 31 c0 xor %eax,%eax
587: 5b pop %rbx
588: c3 retq
589: 00 00 add %al,(%rax)
58b: 00 00 add %al,(%rax)
58d: 00 00 add %al,(%rax)