```python
def fill_template(template: str, values: dict) -> str:
    if not isinstance(template, str):
        raise ValueError("fill_template expects a string template")
    
    result = []
    i = 0
    n = len(template)
    
    while i < n:
        if template[i] == '{':
            i += 1
            name = ""
            # Collect the name until we hit a closing brace
            while i < n and template[i] not in '}{':
                if not template[i].isalnum() and template[i] != '_':
                    raise ValueError("Placeholder name contains invalid character")
                name += template[i]
                i += 1
            
            if not name:
                raise ValueError("Placeholder name is empty")
            
            if name not in values:
                raise ValueError(f"Placeholder '{name}' not found in values")
            
            result.append(str(values[name]))
            # Skip the closing brace
            if i < n and template[i] == '}':
                i += 1
            else:
                # Unterminated placeholder
                raise ValueError("Placeholder not closed")
        else:
            result.append(template[i])
            i += 1
    
    return ''.join(result)
```