// { dg-do run  }
// GROUPS passed conversions
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <fstream>

class cvec {
public:
        ~cvec(){ delete s; }
        cvec(const char*x) { s = new char[std::strlen(x)+1]; std::strcpy(s, x); }
	cvec(const cvec& c) { s = new char[std::strlen(c.s)+1]; std::strcpy(s, c.s); }
        operator const char*() { return s; }
private:
        char *s;
};

cvec
B(const char* a)
{
        return a;
}

void
A(const char* s)
{
        // s still ok here
        std::ifstream inf(s);
	if (std::strncmp ("aaa", s, 3))
	  {
	    std::printf ("FAIL\n");
	    std::exit (1);
	  }
	else
	  std::printf ("PASS\n");
}

int main()
{
        A(B("aaa"));
}
