mozilla/rust — Issue #1700: "internal error in instantiate" when using a generic impl method
Author: jsternberg
Created: 2012-01-29 17:19:59+00:00
State: open

This problem is illustrated with the following code:

use std;
import std::io::*;

iface ninja_str {
fn to_str() -> str;
}

impl of ninja_str for str {
fn to_str() -> str { self }
}

impl of ninja_str for [str] {
fn to_str() -> str {
alt vec::len(self) {
0u { "" }
x {
vec::foldl(self[0], vec::slice(self, 1u, x)) {|iter, y|
iter + ", " + y
}
}
}
}
}

// this works fine
fn print(str: T) {
println(str.to_str());
}

impl ninja_file for writer {
// this causes 'error: internal error in instantiate'
fn build(str: T) {
self.write(str::bytes(str.to_str()));
}
}

fn main() {
print("hello, world");
}