class Widget { public: template void processPointer(T* ptr) { } private: template void processPointer(void*); }; int main() { Widget w; w.processPointer(new int()); return 0; } 补充clang++编译后的汇编代码: .text .file "private.cpp" .globl main # -- Begin function main .p2align 4, 0x90 .type main,@function main: # @main .cfi_startproc # %bb.0: pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp subq $16, %rsp movl $0, -4(%rbp) movl $4, %edi callq _Znwm@PLT movq %rax, %rsi movl $0, (%rax) leaq -8(%rbp), %rdi callq _ZN6Widget14processPointerIiEEvPT_ xorl %eax, %eax addq $16, %rsp popq %rbp .cfi_def_cfa %rsp, 8 retq .Lfunc_end0: .size main, .Lfunc_end0-main .cfi_endproc # -- End function .section .text._ZN6Widget14processPointerIiEEvPT_,"axG",@progbits,_ZN6Widget14processPointerIiEEvPT_,comdat .weak _ZN6Widget14processPointerIiEEvPT_ # -- Begin function _ZN6Widget14processPointerIiEEvPT_ .p2align 4, 0x90 .type _ZN6Widget14processPointerIiEEvPT_,@function _ZN6Widget14processPointerIiEEvPT_: # @_ZN6Widget14processPointerIiEEvPT_ .cfi_startproc # %bb.0: pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp movq %rdi, -8(%rbp) movq %rsi, -16(%rbp) popq %rbp .cfi_def_cfa %rsp, 8 retq .Lfunc_end1: .size _ZN6Widget14processPointerIiEEvPT_, .Lfunc_end1-_ZN6Widget14processPointerIiEEvPT_ .cfi_endproc # -- End function .ident "Ubuntu clang version 14.0.0-1ubuntu1.1" .section ".note.GNU-stack","",@progbits .addrsig .addrsig_sym _ZN6Widget14processPointerIiEEvPT_ .addrsig_sym _Znwm 编译结果: 