# PR #25695 完整报告

- 仓库：`sgl-project/sglang`
- 标题：fix (jit kernel): elementwise activation C++ error
- 合并时间：2026-05-19 15:23
- 原文链接：http://prhub.com.cn/sgl-project/sglang/pull/25695

---

## 执行摘要

修复 JIT 核函数中因缺少 `template` 关键字导致的编译失败，使 Qwen3-30B-A3B 等模型能正常启动。变更仅一行实质修改（4 处补全），风险极低。

## 功能与动机

运行 `python -m sglang.launch_server --model Qwen/Qwen3-30B-A3B` 时，因 `activation_kernel` 模板调用缺少 `ActivationKernel::template` 限定导致编译错误。此修复使最新版 sglang 能正常启动。

## 实现拆解

1. 在 `python/sglang/jit_kernel/csrc/elementwise/activation.cuh` 中，`select_kernel` 函数返回类型为 `decltype(activation_kernel<kSiLU, kFilterExpert>)`，但函数体直接使用了 `activation_kernel<...>`，没有通过类名限定。
2. 根据 C++ 两阶段查找规则，在类模板内部调用依赖模板名称成员时，必须使用 `ClassName::template member_name<...>` 语法，否则编译器会将其当作非模板名称处理。
3. 将三处返回分支和一处 `decltype` 中的 `activation_kernel<...>` 全部改为 `ActivationKernel::template activation_kernel<...>`。

### `python/sglang/jit_kernel/csrc/elementwise/activation.cuh`

唯一修改的文件，修复了模板依赖名称解析错误。

```cpp
// python/sglang/jit_kernel/csrc/elementwise/activation.cuh
// 修复：在类模板成员函数中返回依赖模板函数时，必须使用
// ClassName::template function_name<...> 语法，以正确解析模板参数。
template <bool kFilterExpert>
static auto select_kernel(const std::string& type)
    -> decltype(ActivationKernel::template activation_kernel<ActivationKind::kSiLU, kFilterExpert>) {
  using namespace host;
  if (type == "silu") {
    return ActivationKernel::template activation_kernel<ActivationKind::kSiLU, kFilterExpert>;
  } else if (type == "gelu") {
    return ActivationKernel::template activation_kernel<ActivationKind::kGELU, kFilterExpert>;
  } else if (type == "gelu_tanh") {
    return ActivationKernel::template activation_kernel<ActivationKind::kGELUTanh, kFilterExpert>;
  } else {
    Panic("unsupported activation type: ", type);
  }
}

```

## 评论区精华

无有效讨论。

## 风险与影响

- **风险**：极低。仅修正模板语法，不改变运行时行为。
- **影响**：修复启动崩溃，使 JIT 核函数能正常编译并执行。

## 关联脉络

本 PR 与历史 PR #24710 同属 JIT 核函数模块，但关注点不同（#24710 优化 RMSNorm，本 PR 修复编译错误），无直接演进关系。