```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(name: str) -> bool:
        return name.isalnum() and len(name) > 0
    
    result = []
    i = 0
    while i < len(template):
        if template[i] == '{':
            j = i + 1
            while j < len(template) and template[j].isalnum():
                j += 1
            placeholder_name = template[i+1:j]
            
            if not is_valid_placeholder(placeholder_name):
                raise ValueError(f"Invalid placeholder name: {placeholder_name}")
            
            if placeholder_name in values:
                result.append(values[placeholder_name])
            else:
                raise ValueError(f"Unknown placeholder name: {placeholder_name}")
        
        elif template[i] == '}':
            raise ValueError("Unterminated placeholder")
        
        else:
            result.append(template[i])
        
        i += 1
    
    return ''.join(result)
```