<div dir="ltr">You can still use std::copy, but you'd need to pass Toks.get() as the last arg, instead of just 'Toks'.</div><br><div class="gmail_quote"><div dir="ltr">On Wed, Jun 14, 2017 at 4:04 PM Masoud Ataei via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Hello Chenwj,</div><div><br></div><div>Thank you for your reply. I did the following and it did work:</div><div><br></div><div>replace:</div><div>###</div></div><div dir="ltr"><div>Token *Toks = new Token[Pragma.size()];</div><div>std::copy(Pragma.begin(), Pragma.end(), Toks);</div></div><div dir="ltr"><div>PP.EnterTokenStream(Toks, Pragma.size(), /*DisableMacroExpansion=*/true, /*OwnsTokens=*/true);</div><div>##</div><div>by:</div><div>##</div><div>auto Toks = llvm::make_unique<Token[]>(Pragma.size());</div><div>Toks[0] = Pragma[0];Toks[1] = Pragma[1];Toks[2] = Pragma[2];Toks[3] = Pragma[3]; </div><div>PP.EnterTokenStream(std::move(Toks), Pragma.size(), true); </div><div>##</div><div><br></div><div>Bests</div></div><div class="gmail_extra"></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jun 14, 2017 at 6:20 PM, 陳韋任 <span dir="ltr"><<a href="mailto:chenwj.cs97g@g2.nctu.edu.tw" target="_blank">chenwj.cs97g@g2.nctu.edu.tw</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_default"><font face="arial, helvetica, sans-serif">Probably you can `grep -r "EnterTokenStream" lib/*` to see how pass unique_ptr to</font><br></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">EnterTokenStream. Seem you need to use std::move.</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif"><br></font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">HTH,</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">chenwj</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif"><br></font></div>







</div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="m_-1770638340286806969h5">2017-06-15 0:43 GMT+08:00 Masoud Ataei via cfe-dev <span dir="ltr"><<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>></span>:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="m_-1770638340286806969h5"><div dir="ltr">Hello all,<div><br></div><div>I have the following lines of code. To run it, I need to change the rule of the function "EnterTokenStream" from private to a public function in "/usr/local/include/clang/Lex/Preprocessor.h". In this case this code will working with raw pointer "*Toks".</div><div><div>------------------------------------</div><div>PP.Lex(Tok);<br></div><div><div>SmallVector<Token, 4> Pragma;<br></div><div>Pragma.push_back(Tok);</div><div><br></div><div>Token *Toks = new Token[Pragma.size()];</div><div>std::copy(Pragma.begin(), Pragma.end(), Toks);</div><div>PP.EnterTokenStream(Toks, Pragma.size(), true, true);</div></div><div>--------------------------------------------------------------</div><div><br></div><div>But default rule for the function "EnterTokenStream" is private. So I cannot call this function, and I should call this one:</div><div>---------------------------------------------</div><div>void EnterTokenStream(std::unique_ptr<Token[]> Toks, unsigned NumToks, bool DisableMacroExpansion)</div><div>---------------------------------------------</div><div><br></div><div><br></div><div>First argument of this function needs  "std::unique_ptr<Token[]> Toks". So I have tried to define Toks as a unique pointer. I did like this:</div><div>--------------------------------------------</div><div><div>PP.Lex(Tok);<br></div><div><div>SmallVector<Token, 4> Pragma;<br></div><div>Pragma.push_back(Tok);</div><div><br></div><div>unique_ptr<Token[]> Toks(new Token[Pragma.size()]);</div><div>std::copy(Pragma.begin(), Pragma.end(), Toks);</div><div>PP.EnterTokenStream(Toks, Pragma.size(), true);</div></div></div><div>------------------------------------------------</div><div><br></div><div>but it gives me the following error for std::copy:</div><div>---------------------------------------------</div><div><div> error: use of deleted function ‘std::unique_ptr<_Tp [], _Dp>::unique_ptr(const std::unique_ptr<_Tp [], _Dp>&) [with _Tp = clang::Token; _Dp = std::default_delete<clang::Token []>]’</div><div>    std::copy(Pragma.begin(), Pragma.end(), Toks);</div></div><div>----------------------------------------------------------</div><div><br></div><div>and the same error for EnterTokenStream:</div><div>------------------------------------------------------</div><div><div>error: use of deleted function ‘std::unique_ptr<_Tp [], _Dp>::unique_ptr(const std::unique_ptr<_Tp [], _Dp>&) [with _Tp = clang::Token; _Dp = std::default_delete<clang::Token []>]’</div><div>    PP.EnterTokenStream(Toks, Pragma.size(), true);</div></div><div>------------------------------------------------------------</div><div><br></div><div>Can anyone help me how to fix this errors? How can I change my original code to something that I can use the new EnterTokenStream function?</div><div><br></div><div>Thank you.</div><span class="m_-1770638340286806969m_-5728517888839300374HOEnZb"><font color="#888888"><div><br>-- </div><div class="m_-1770638340286806969m_-5728517888839300374m_-5040403231299086829gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div>------<br>----------<br>Masoud Ataei (Mr.)<br><div><div><br></div></div></div></div></div></div></div></div></div></div></div></div>
</font></span></div></div>
<br></div></div>_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
<br></blockquote></div><span class="m_-1770638340286806969HOEnZb"><font color="#888888"><br><br clear="all"><div><br></div>-- <br><div class="m_-1770638340286806969m_-5728517888839300374gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>Wei-Ren Chen (陳韋任)<br>Homepage: <a href="https://people.cs.nctu.edu.tw/~chenwj" target="_blank">https://people.cs.nctu.edu.tw/~chenwj</a></div></div></div>
</font></span></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br></div><div class="gmail_extra"><div class="m_-1770638340286806969gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div>------<br>----------<br>Masoud Ataei (Mr.)<br></div></div></div></div></div></div></div></div></div></div></div><div class="gmail_extra"><div class="m_-1770638340286806969gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div><div><div><a href="http://publish.uwo.ca/~mataeija" target="_blank">http://publish.uwo.ca/~mataeija</a><br></div></div></div></div></div></div></div></div></div></div></div></div>
</div>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
</blockquote></div>