```python
def fill_template(template: str, values: dict) -> str:
    if not isinstance(template, str):
        raise ValueError("Template must be a string")
    
    result = []
    i = 0
    while i < len(template):
        if template[i] == '{':
            j = i + 1
            while j < len(template) and template[j].isalnum():
                j += 1
            if j - i > 1:
                name = template[i+1:j]
                if not name.isidentifier():
                    raise ValueError(f"Invalid placeholder name: {name}")
                if name in values:
                    result.append(values[name])
                else:
                    raise ValueError(f"Unknown placeholder: {name}")
                i = j
            elif j == len(template):
                raise ValueError("Unterminated placeholder")
        else:
            result.append(template[i])
            i += 1
    
    return ''.join(result)
```