```python
def fill_template(template: str, values: dict) -> str:
    if not isinstance(template, str):
        raise ValueError("fill_template expects a string template")
    
    def is_valid_placeholder(placeholder: str) -> bool:
        return placeholder.isalnum() and len(placeholder) > 0

    output = []
    current_placeholder = ""
    i = 0
    while i < len(template):
        if template[i] == "{":
            if current_placeholder:
                raise ValueError("Unterminated placeholder")
            current_placeholder = ""
            i += 1
        elif template[i] == "}":
            if not current_placeholder:
                raise ValueError("Expected a placeholder name after {")
            if not is_valid_placeholder(current_placeholder):
                raise ValueError(f"Invalid placeholder name: {current_placeholder}")
            
            value = values.get(current_placeholder)
            if value is None:
                raise ValueError(f"Unknown placeholder name: {current_placeholder}")
            
            output.append(value)
            current_placeholder = ""
            i += 1
        else:
            output.append(template[i])
            i += 1
    
    if current_placeholder:
        raise ValueError("Unterminated placeholder")
    
    return "".join(output)
```